{"openapi":"3.1.0","info":{"title":"Censible API","description":"\nABS Census data (2011, 2016, 2021): curated metrics for standard regions and for custom areas users save.\n\n- **Ids are natural keys:** `region_id` (e.g. `AU_2021_SA2_101021007`), `metric_id` (e.g. `median_rent_weekly`).\n- **Never add up values.** For a group of regions or a drawn polygon, preview or save a custom area: its counts\n  are summed first and the metric's formula applied last.\n- **Sign in** with Supabase Auth and send the access token as `Authorization: Bearer <token>`. Every `/v1` endpoint\n  needs it. These docs use your sign-in to the web app, if you're signed in there; otherwise paste a token into\n  Authorize.\n- **Custom areas** belong to the user who saved them, and only they can see them.\n","version":"1.0.0"},"paths":{"/v1/editions":{"get":{"tags":["metrics"],"summary":"Get Editions","description":"Which boundaries and which census the figures use: regions, areas, search and the map are on region_year's\nboundaries (2026); figures come from census_year (2021), the latest census with results, carried onto those\nboundaries with ABS's correspondences until 2026's results load.","operationId":"get_editions_v1_editions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","default":"AU","title":"Country"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Editions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metrics":{"get":{"tags":["metrics"],"summary":"List Metrics","description":"The curated metrics: the friendly entry point. Every metric can be computed for any area.","operationId":"list_metrics_v1_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search label, id, synonyms and description","title":"Q"},"description":"Search label, id, synonyms and description"},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Metric"},"title":"Response List Metrics V1 Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metrics/{metric_id}":{"get":{"tags":["metrics"],"summary":"Get Metric","operationId":"get_metric_v1_metrics__metric_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Metric"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metric-values":{"get":{"tags":["metrics"],"summary":"Metric Values","description":"Metrics for standard regions (the ones ABS publishes), with ABS's own figure alongside where there is one.\nEach region is one of today's places (limits.py; the MCP server, which calls this directly, counts its own).\n\nValues are never added up: for a group of regions, preview or save a custom area instead.","operationId":"metric_values_v1_metric_values_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"region_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"region_ids, repeated or comma-separated (up to 1,000)","title":"Region Ids"},"description":"region_ids, repeated or comma-separated (up to 1,000)"},{"name":"metric_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"All metrics if left out","title":"Metric Ids"},"description":"All metrics if left out"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Census year; every year if left out","title":"Year"},"description":"Census year; every year if left out"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MetricValue"},"title":"Response Metric Values V1 Metric Values Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/map-values":{"get":{"tags":["metrics"],"summary":"Map Values","description":"One metric for every region of a level as colour bands: what a map is shaded by. Five bands split at the\nlevel's quintiles (rounded to tidy numbers, so a colour means the same everywhere), and each region's band, not\nits value, so the whole level's figures can't be taken in one call. Regions with no value (too few people, or\nnothing counted) are left out. Each metric, level and year is one of today's maps.\n\nWith near_lng and near_lat (Explore's map, around the place explored), only the places whose centre is within a\nradius of the point are shaded, and the bands are their quintiles, so the colours run from that area's lowest to\nits highest: 10 km for suburbs and postcodes, wider until there are 20 places (NEAR_KM). The lowest and highest\nare named with their figures (two figures, not the level's). States and city regions are always shaded across\nAustralia. Shading around a point is the same map for the daily limit.\n\nA projected year (2026, 2031) keeps the latest census's bands (bands_year), so the colours show what's projected\nto move: split afresh, a figure moved by Australia's trend would keep every place in its band.","operationId":"map_values_v1_map_values_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"geography","in":"query","required":true,"schema":{"type":"string","description":"One level, e.g. STE, GCCSA, LGA, SAL or POA","title":"Geography"},"description":"One level, e.g. STE, GCCSA, LGA, SAL or POA"},{"name":"metric_id","in":"query","required":true,"schema":{"type":"string","title":"Metric Id"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Census year of the figures; the latest if left out","title":"Year"},"description":"Census year of the figures; the latest if left out"},{"name":"region_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Boundary edition of the regions; the one in use (GET /v1/editions) if left out","title":"Region Year"},"description":"Boundary edition of the regions; the one in use (GET /v1/editions) if left out"},{"name":"near_lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"With near_lat: shade only the places around this point, split among themselves","title":"Near Lng"},"description":"With near_lat: shade only the places around this point, split among themselves"},{"name":"near_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Near Lat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapValues"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/regions":{"get":{"tags":["regions"],"summary":"Search Regions","description":"Find regions by name, e.g. for a search box. Exact names come first, then names starting with q. A postcode\nalso finds itself by its digits, and by the suburbs in it (\"Brunswick\" finds 3056); five or more digits find\nSA1s whose code starts with them (they have no names; an exact code comes first). Each region comes with its population (the\nlatest census, for ranking) and, for postcodes, its largest suburbs (postcode_suburbs): only when searching (q), so\nplain lists, such as every council, stay quick.","operationId":"search_regions_v1_regions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Part of a name, or an exact code or region_id; a postcode (3056), or the start of an SA1's code (five digits or more: 20601…)","title":"Q"},"description":"Part of a name, or an exact code or region_id; a postcode (3056), or the start of an SA1's code (five digits or more: 20601…)"},{"name":"geography","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"e.g. SA2, LGA, POA, SAL; repeated or comma-separated for several","title":"Geography"},"description":"e.g. SA2, LGA, POA, SAL; repeated or comma-separated for several"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Census year, e.g. 2021","title":"Year"},"description":"Census year, e.g. 2021"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country code, e.g. AU","title":"Country"},"description":"Country code, e.g. AU"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Region"},"title":"Response Search Regions V1 Regions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/regions/at":{"get":{"tags":["regions"],"summary":"Regions At","description":"The regions on the map that contain a point (one per level), e.g. a pin's state and city region. Only\nlevels with outlines loaded; [] before a boundary load. Answers are cached (see cache.py).","operationId":"regions_at_v1_regions_at_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude, e.g. 151.21","title":"Lng"},"description":"Longitude, e.g. 151.21"},{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude, e.g. -33.87","title":"Lat"},"description":"Latitude, e.g. -33.87"},{"name":"geography","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"e.g. STE, GCCSA, LGA; repeated or comma-separated for several","title":"Geography"},"description":"e.g. STE, GCCSA, LGA; repeated or comma-separated for several"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Boundary edition; the one in use (GET /v1/editions) if left out","title":"Year"},"description":"Boundary edition; the one in use (GET /v1/editions) if left out"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Region"},"title":"Response Regions At V1 Regions At Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/regions/{region_id}":{"get":{"tags":["regions"],"summary":"Get Region","operationId":"get_region_v1_regions__region_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Region"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/find":{"post":{"tags":["find"],"summary":"Find","description":"Places like a starting place (a standard region, or any place's figures, e.g. a pin or saved area), or that\nmeet criteria, best matches first. With criteria only, the places that meet them, largest first. Each different\nsearch is one of today's Find searches (the same one again is free).","operationId":"find_v1_find_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FindResult"},"type":"array","title":"Response Find V1 Find Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/regions/{region_id}/similar":{"get":{"tags":["find"],"summary":"Similar","description":"The 10 regions most like this one, at its own level, on all the headline figures (precomputed, in\ngold.similar_regions), each with the three figures it matches best (closest), as Find gives them. [] for places\nunder 1,000 people, levels Find doesn't compare, or before a dbt build.","operationId":"similar_v1_regions__region_id__similar_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SimilarRegion"},"title":"Response Similar V1 Regions  Region Id  Similar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/areas":{"get":{"tags":["areas"],"summary":"List Areas","description":"Your saved areas, oldest first.","operationId":"list_areas_v1_areas_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AreaSummary"},"type":"array","title":"Response List Areas V1 Areas Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["areas"],"summary":"Create Area","description":"Save an area from a list of regions or a polygon. Polygons take a few seconds: each SA1 is weighted by the\nshare of its people inside.","operationId":"create_area_v1_areas_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Area"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/areas/preview":{"post":{"tags":["areas"],"summary":"Preview Area","description":"Metrics for an area without saving it, e.g. while a user is picking regions or drawing. Answers are cached\n(see cache.py): the order of region_ids doesn't change them. One of today's places: a region by its id, a list of\nthem or a polygon as itself (the web app's background loads count apart: limits.py).","operationId":"preview_area_v1_areas_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaPreview"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AreaValue"},"type":"array","title":"Response Preview Area V1 Areas Preview Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/areas/{area_id}":{"get":{"tags":["areas"],"summary":"Get Area","operationId":"get_area_v1_areas__area_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","title":"Area Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Area"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["areas"],"summary":"Update Area","description":"Rename an area, change its description, or replace its regions or polygon.","operationId":"update_area_v1_areas__area_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","title":"Area Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Area"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["areas"],"summary":"Delete Area","operationId":"delete_area_v1_areas__area_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","title":"Area Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/areas/{area_id}/values":{"get":{"tags":["areas"],"summary":"Area Values","description":"Every metric for a saved area, for each census year it can be computed for. One of today's places.","operationId":"area_values_v1_areas__area_id__values_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"area_id","in":"path","required":true,"schema":{"type":"string","title":"Area Id"}},{"name":"metric_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"repeated or comma-separated; all metrics if left out","title":"Metric Ids"},"description":"repeated or comma-separated; all metrics if left out"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SavedAreaValue"},"title":"Response Area Values V1 Areas  Area Id  Values Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sites/search":{"get":{"tags":["sites"],"summary":"Search Sites","description":"Your sites, from every set, whose name or address contains q: for the search box. Names starting with q\ncome first.","operationId":"search_sites_v1_sites_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Part of a name or address","title":"Q"},"description":"Part of a name or address"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SiteFound"},"title":"Response Search Sites V1 Sites Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site-sets":{"get":{"tags":["sites"],"summary":"List Sets","description":"Your site sets, oldest first.","operationId":"list_sets_v1_site_sets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SiteSetSummary"},"type":"array","title":"Response List Sets V1 Site Sets Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["sites"],"summary":"Create Set","description":"A new, empty set: add sites one at a time, or upload a spreadsheet of them. Its catchments are a circle of\nradius_km, or travel_minutes' drive or walk (travel_mode) from each site.","operationId":"create_set_v1_site_sets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSetCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSet"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/site-sets/{set_id}":{"get":{"tags":["sites"],"summary":"Get Set","operationId":"get_set_v1_site_sets__set_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSet"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["sites"],"summary":"Update Set","description":"Rename a set, or change its figure's label, which way is better, or its catchments (the radius, or a travel\ntime), which redoes them all: a few seconds for a travel time and many sites.","operationId":"update_set_v1_site_sets__set_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSet"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sites"],"summary":"Delete Set","operationId":"delete_set_v1_site_sets__set_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site-sets/{set_id}/upload":{"post":{"tags":["sites"],"summary":"Upload","description":"Import a spreadsheet (CSV) of sites: name, an address or latitude and longitude, and one performance figure.\nColumns are guessed unless mapping says; send dry_run first to check them. Each site is placed (its coordinates,\nelse a suburb or postcode in its address, else not yet) and gets a catchment. Up to 500 sites a set, and within\nyour plan's sites (402 past them).","operationId":"upload_v1_site_sets__set_id__upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteUpload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site-sets/{set_id}/sites":{"post":{"tags":["sites"],"summary":"Add Site","description":"Add one site. Without lng and lat, a suburb or postcode in its address places it roughly. 402 past your\nplan's sites.","operationId":"add_site_v1_site_sets__set_id__sites_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site-sets/{set_id}/sites/{site_id}":{"patch":{"tags":["sites"],"summary":"Update Site","description":"Rename a site, change its figure, or move its pin (which redoes its catchment).","operationId":"update_site_v1_site_sets__set_id__sites__site_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sites"],"summary":"Delete Site","operationId":"delete_site_v1_site_sets__set_id__sites__site_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site-sets/{set_id}/figures":{"get":{"tags":["sites"],"summary":"Figures","description":"Each site's catchment figures, computed like a saved area's. The set is one of today's places.","operationId":"figures_v1_site_sets__set_id__figures_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}},{"name":"metric_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"repeated or comma-separated; the similarity index's headline figures and population if left out","title":"Metric Ids"},"description":"repeated or comma-separated; the similarity index's headline figures and population if left out"},{"name":"all_years","in":"query","required":false,"schema":{"type":"boolean","description":"Every census and projected year, not just the latest census","default":false,"title":"All Years"},"description":"Every census and projected year, not just the latest census"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SiteValue"},"title":"Response Figures V1 Site Sets  Set Id  Figures Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site-sets/{set_id}/values":{"get":{"tags":["sites"],"summary":"Group Values","description":"The set's catchments as one place (people in overlapping catchments count once), for every census year and\nprojection: like a saved area's values, to compare a site or a place with. One of today's places.","operationId":"group_values_v1_site_sets__set_id__values_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}},{"name":"group","in":"query","required":false,"schema":{"enum":["all","best"],"type":"string","description":"Every site's catchment ('all'), or the best third's ('best'), as one place","default":"all","title":"Group"},"description":"Every site's catchment ('all'), or the best third's ('best'), as one place"},{"name":"metric_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"repeated or comma-separated; all metrics if left out","title":"Metric Ids"},"description":"repeated or comma-separated; all metrics if left out"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AreaValue"},"title":"Response Group Values V1 Site Sets  Set Id  Values Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/site-sets/{set_id}/contrast":{"get":{"tags":["sites"],"summary":"Contrast","description":"What sets your best sites apart: the top third by performance against the bottom third, on the headline\nfigures Find matches on. It shows what goes with your best sites, not what causes it. Needs 9 sites with a\nfigure and a place.","operationId":"contrast_v1_site_sets__set_id__contrast_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"set_id","in":"path","required":true,"schema":{"type":"string","title":"Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteContrast"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/travel":{"get":{"tags":["travel"],"summary":"Travel Shape","description":"Where you can get to from a point in minutes' drive or walk, on OpenStreetMap's roads and paths, without\ntraffic. The point is rounded to 4 decimals (about 10 m). Send the geometry to POST /v1/areas/preview as geojson\nfor the people inside it. 422 if there's no road near the point; 503 if travel times aren't available.","operationId":"travel_shape_v1_travel_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude, e.g. 151.21","title":"Lng"},"description":"Longitude, e.g. 151.21"},{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude, e.g. -33.87","title":"Lat"},"description":"Latitude, e.g. -33.87"},{"name":"mode","in":"query","required":true,"schema":{"enum":["drive","walk"],"type":"string","description":"drive or walk","title":"Mode"},"description":"drive or walk"},{"name":"minutes","in":"query","required":true,"schema":{"type":"integer","description":"drive: 5, 10, 15, 20 or 30; walk: 5, 10, 15 or 20","title":"Minutes"},"description":"drive: 5, 10, 15, 20 or 30; walk: 5, 10, 15 or 20"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TravelShape"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage":{"get":{"tags":["usage"],"summary":"Usage","description":"Your plan, its limits, and how much of each you've used: today's (days run to midnight, Sydney time), this\nmonth's reports and your team's requests (from the 1st), extras bought, and your sites.","operationId":"usage_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/usage/open":{"post":{"tags":["usage"],"summary":"Opened","description":"A place you opened (its profile key: a region_id, 'area:<id>', 'pin:…', 'set:<id>'): one of today's places,\nunless you've opened it already today. 429 once they're used up.","operationId":"opened_v1_usage_open_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageEvent"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports":{"get":{"tags":["reports"],"summary":"List Reports","description":"Your reports, newest first.","operationId":"list_reports_v1_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ReportSummary"},"type":"array","title":"Response List Reports V1 Reports Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["reports"],"summary":"Create Report","description":"Starts a report: Claude writes its words in the background (about 30 seconds); poll GET /v1/reports/{id} until\nit's done. The same place against the same benchmark again reuses the report you have (and isn't counted).\nOne of the month's reports, else one bought; 402 when they're used up on Explore (buy another: POST\n/v1/billing/buy), or not on the plan, and 429 on Analyse until the 1st.","operationId":"create_report_v1_reports_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCreate"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/{report_id}":{"get":{"tags":["reports"],"summary":"Get Report","description":"A report, with its words once they're written.","operationId":"get_report_v1_reports__report_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["reports"],"summary":"Delete Report","operationId":"delete_report_v1_reports__report_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cover-map":{"post":{"tags":["map"],"summary":"Cover Map","description":"A map of a place (a region, or several: a saved area's, Australia's states) for the PDF profile's cover.\n404 for places without shapes (federal electorates, urban areas) or before shapes are loaded.","operationId":"cover_map_v1_cover_map_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverMapRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverMap"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/billing":{"get":{"tags":["billing"],"summary":"State","description":"What's on offer, and your subscription: how it's billed, and when it renews or ends.","operationId":"state_v1_billing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingState"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/billing/checkout":{"post":{"tags":["billing"],"summary":"Checkout","description":"A Stripe Checkout page that subscribes you to Explore or Analyse. 409 if you're subscribed already: switch plans\nin the customer portal instead (POST /v1/billing/portal with the plan).","operationId":"checkout_v1_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscribe"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Link"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/billing/buy":{"post":{"tags":["billing"],"summary":"Buy","description":"A Stripe Checkout page for an extra, paid at once with a tax invoice: reports past Explore's month (they don't\nexpire), blocks of requests past Analyse's (for your whole team), or a person's review of one of your reports\n(report_id). 402 for an extra your plan doesn't buy; 409 for a report reviewed already.","operationId":"buy_v1_billing_buy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Buy"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Link"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/billing/portal":{"post":{"tags":["billing"],"summary":"Portal","description":"Your Stripe customer portal: your card, Explore or Analyse, monthly or annual, tax invoices, cancelling. With a\nplan, straight to confirming the change to it (upgrading, say); 422 if you have no subscription of your own to\nchange or you're on it already. 404 if you've never paid.","operationId":"portal_v1_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Switch"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Link"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/lists":{"get":{"tags":["lists"],"summary":"List Lists","description":"Your place lists, the most recently changed first.","operationId":"list_lists_v1_lists_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PlaceListSummary"},"type":"array","title":"Response List Lists V1 Lists Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["lists"],"summary":"Create List","description":"Save a list of places (each once, in order) with its benchmark, columns and sort.","operationId":"create_list_v1_lists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceListCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/lists/{list_id}":{"get":{"tags":["lists"],"summary":"Get List","operationId":"get_list_v1_lists__list_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["lists"],"summary":"Update List","description":"Change only the fields given; places replaces the list's places.","operationId":"update_list_v1_lists__list_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceListUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lists"],"summary":"Delete List","operationId":"delete_list_v1_lists__list_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ask":{"post":{"tags":["ask"],"summary":"Ask","description":"Asks a question, or a follow-up to one of yours (question_id), and streams the answer (above). One of the\nmonth's questions: Analyse only (402 on other plans), 429 once they're used up. 409 while the question's last\nturn is still being answered.","operationId":"ask_v1_ask_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"text/event-stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/questions":{"get":{"tags":["ask"],"summary":"List Questions","description":"Your questions, the latest first (the last 50).","operationId":"list_questions_v1_questions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/QuestionSummary"},"type":"array","title":"Response List Questions V1 Questions Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/questions/measures":{"get":{"tags":["ask"],"summary":"Recent Measures","description":"The measures your answers used lately, each once, the latest first, with the question that used it (the Data\ncatalogue's Recently used).","operationId":"recent_measures_v1_questions_measures_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RecentMeasure"},"type":"array","title":"Response Recent Measures V1 Questions Measures Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/questions/{question_id}":{"get":{"tags":["ask"],"summary":"Get Question","description":"A question with each turn's steps, tables and charts, and answer.","operationId":"get_question_v1_questions__question_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","title":"Question Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Question"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ask"],"summary":"Delete Question","operationId":"delete_question_v1_questions__question_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"question_id","in":"path","required":true,"schema":{"type":"string","title":"Question Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/starred":{"get":{"tags":["metrics"],"summary":"List Starred","description":"Your starred metric_ids, the latest first.","operationId":"list_starred_v1_starred_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Starred V1 Starred Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/starred/{metric_id}":{"put":{"tags":["metrics"],"summary":"Star","description":"Stars a measure (404 for one that isn't in the catalog).","operationId":"star_v1_starred__metric_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["metrics"],"summary":"Unstar","operationId":"unstar_v1_starred__metric_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Area":{"properties":{"area_id":{"type":"string","title":"Area Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"kind":{"type":"string","enum":["regions","polygon"],"title":"Kind"},"country_code":{"type":"string","title":"Country Code"},"census_year":{"type":"integer","title":"Census Year","description":"The census its regions are from (the latest when it was saved)"},"region_count":{"type":"integer","title":"Region Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry","description":"Polygon areas: the GeoJSON as it was given"},"regions":{"items":{"$ref":"#/components/schemas/AreaRegion"},"type":"array","title":"Regions"}},"type":"object","required":["area_id","name","description","kind","country_code","census_year","region_count","created_at","updated_at","geometry","regions"],"title":"Area"},"AreaCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"region_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20000,"minItems":1},{"type":"null"}],"title":"Region Ids","description":"Regions the area is made of, as region_ids from the latest census, e.g. [\"AU_2021_SA3_20604\", \"AU_2021_SA2_206041117\"]. SA1-SA4, GCCSA and states can be mixed; LGAs, postcodes (POA) and suburbs (SAL) are used on their own."},"geojson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geojson","description":"A polygon drawn on a map: a GeoJSON Polygon or MultiPolygon, or a Feature or FeatureCollection of them, in longitude/latitude."}},"type":"object","required":["name"],"title":"AreaCreate"},"AreaPreview":{"properties":{"region_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20000,"minItems":1},{"type":"null"}],"title":"Region Ids","description":"Regions the area is made of, as region_ids from the latest census, e.g. [\"AU_2021_SA3_20604\", \"AU_2021_SA2_206041117\"]. SA1-SA4, GCCSA and states can be mixed; LGAs, postcodes (POA) and suburbs (SAL) are used on their own."},"geojson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geojson","description":"A polygon drawn on a map: a GeoJSON Polygon or MultiPolygon, or a Feature or FeatureCollection of them, in longitude/latitude."},"metric_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metric Ids","description":"Metrics to compute; all of them if left out"}},"type":"object","title":"AreaPreview"},"AreaRegion":{"properties":{"region_id":{"type":"string","title":"Region Id"},"weight":{"type":"number","title":"Weight","description":"Share of the region's counts in the area: 1 for picked regions, the share of the SA1's persons inside a polygon"}},"type":"object","required":["region_id","weight"],"title":"AreaRegion"},"AreaSummary":{"properties":{"area_id":{"type":"string","title":"Area Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"kind":{"type":"string","enum":["regions","polygon"],"title":"Kind"},"country_code":{"type":"string","title":"Country Code"},"census_year":{"type":"integer","title":"Census Year","description":"The census its regions are from (the latest when it was saved)"},"region_count":{"type":"integer","title":"Region Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["area_id","name","description","kind","country_code","census_year","region_count","created_at","updated_at"],"title":"AreaSummary"},"AreaUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"region_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20000,"minItems":1},{"type":"null"}],"title":"Region Ids","description":"Regions the area is made of, as region_ids from the latest census, e.g. [\"AU_2021_SA3_20604\", \"AU_2021_SA2_206041117\"]. SA1-SA4, GCCSA and states can be mixed; LGAs, postcodes (POA) and suburbs (SAL) are used on their own."},"geojson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geojson","description":"A polygon drawn on a map: a GeoJSON Polygon or MultiPolygon, or a Feature or FeatureCollection of them, in longitude/latitude."}},"type":"object","title":"AreaUpdate","description":"Only the fields given change. A new region_ids or geojson replaces the area's shape (and can switch its kind)."},"AreaValue":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"label":{"type":"string","title":"Label"},"unit":{"type":"string","title":"Unit"},"census_year":{"type":"integer","title":"Census Year"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base"},"value_is_floor":{"type":"boolean","title":"Value Is Floor"},"basis":{"type":"string","enum":["census","carried","projected","trend","modelled"],"title":"Basis","description":"'census': the region's own census. 'carried': an earlier census's counts carried onto the region with ABS's population-weighted correspondences, e.g. 2021 figures for a 2026 region. 'projected': a year after the latest census, for metrics built from people by age and sex. 'trend': a year after the latest census, a share moved by its trend or held at the latest census, or a dollar figure in that year's dollars. 'modelled': household spending, modelled from the ABS Monthly Household Spending Indicator for the 12 months to its latest release (that year)"},"estimated":{"type":"boolean","title":"Estimated","description":"Not ABS's own counts for exactly these regions: a carried value where a boundary changed"}},"type":"object","required":["metric_id","label","unit","census_year","value","base","value_is_floor","basis","estimated"],"title":"AreaValue"},"AskCreate":{"properties":{"question":{"type":"string","maxLength":2000,"minLength":1,"title":"Question","description":"What the person asks"},"question_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Question Id","description":"A follow-up to this question; a new one if left out"},"compared":{"anyOf":[{"$ref":"#/components/schemas/Compared"},{"type":"null"}],"description":"What the person compares places with; Australia if left out"}},"type":"object","required":["question"],"title":"AskCreate"},"BillingState":{"properties":{"available":{"type":"boolean","title":"Available","description":"Whether this server takes payments (Stripe's set up)"},"plans":{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object"},"type":"object","title":"Plans","description":"The plans on offer and their prices in cents: {base: {month: 75000, year: …}, full: …}"},"extras":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object","title":"Extras","description":"The extras on offer and their prices in cents: report, requests (a block), review"},"request_block":{"type":"integer","title":"Request Block","description":"Requests in a block"},"gst":{"type":"string","enum":["excluded","included"],"title":"Gst","description":"Whether the plans' prices include GST","default":"excluded"},"subscribed":{"type":"boolean","title":"Subscribed","description":"Whether you have a subscription that pays for your plan"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Your subscription's status in Stripe: active, past_due, canceled …"},"manage":{"type":"boolean","title":"Manage","description":"Whether you have a customer portal to open (you have paid before)"},"interval":{"anyOf":[{"type":"string","enum":["month","year"]},{"type":"null"}],"title":"Interval","description":"How your subscription is billed"},"renews_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Renews At","description":"When it renews (Unix seconds)"},"ends_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ends At","description":"When it ends, if it's cancelled (Unix seconds)"},"changes_to":{"anyOf":[{"$ref":"#/components/schemas/Change"},{"type":"null"}],"description":"A change booked for the end of the period paid for: a downgrade to Explore, or from annual to monthly billing"}},"type":"object","required":["available","plans","extras","request_block","subscribed","status","manage"],"title":"BillingState"},"Buy":{"properties":{"item":{"type":"string","enum":["report","requests","review"],"title":"Item","description":"A generated report (Explore, past the month's), a block of requests (Analyse, for the team), or a reviewed report"},"quantity":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Quantity","description":"How many reports or blocks","default":1},"report_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Report Id","description":"For a review: the report to review"}},"type":"object","required":["item"],"title":"Buy"},"Change":{"properties":{"plan":{"type":"string","enum":["base","full"],"title":"Plan","description":"The plan it changes to: Explore (base) or Analyse (full)"},"interval":{"type":"string","enum":["month","year"],"title":"Interval","description":"… billed monthly or annually"},"at":{"type":"integer","title":"At","description":"When (Unix seconds): the end of the period paid for"}},"type":"object","required":["plan","interval","at"],"title":"Change"},"Compared":{"properties":{"key":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Key","description":"What the person compares with, as a profile key (a region_id, 'AUS', 'sites' …)"},"name":{"type":"string","maxLength":300,"minLength":1,"title":"Name","description":"Its name, e.g. 'Victoria'"}},"type":"object","required":["name"],"title":"Compared"},"ContrastFigure":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"label":{"type":"string","title":"Label"},"unit":{"type":"string","title":"Unit"},"best":{"type":"number","title":"Best","description":"The best third's average"},"rest":{"type":"number","title":"Rest","description":"The bottom third's average"},"others":{"type":"number","title":"Others","description":"The average of every site outside the bottom third"},"all":{"type":"number","title":"All","description":"Every site's average"},"gap_sd":{"type":"number","title":"Gap Sd","description":"best - rest, in standard deviations across all the sites"},"gap_under_sd":{"type":"number","title":"Gap Under Sd","description":"rest - others, in standard deviations across all the sites"},"spearman":{"type":"number","title":"Spearman","description":"Rank correlation with performance across all the sites, + when the figure goes with better sites"},"shown":{"type":"boolean","title":"Shown","description":"A large gap that the correlation agrees with: one of the figures to tell"},"shown_under":{"type":"boolean","title":"Shown Under","description":"The same for the bottom third against the other sites: one of the figures that set the underperforming sites apart"}},"type":"object","required":["metric_id","label","unit","best","rest","others","all","gap_sd","gap_under_sd","spearman","shown","shown_under"],"title":"ContrastFigure"},"CoverLabel":{"properties":{"name":{"type":"string","title":"Name"},"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"}},"type":"object","required":["name","x","y"],"title":"CoverLabel"},"CoverMap":{"properties":{"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"place":{"items":{"type":"string"},"type":"array","title":"Place","description":"The place: SVG paths in the map's pixels, one per region"},"outline":{"items":{"type":"string"},"type":"array","title":"Outline","description":"Its outer edge: the regions together"},"inner":{"items":{"type":"string"},"type":"array","title":"Inner","description":"The areas inside it (a council's suburbs, a state's SA4s), or a saved area's regions"},"around":{"items":{"type":"string"},"type":"array","title":"Around","description":"Its neighbours at the same level, to draw faintly"},"labels":{"items":{"$ref":"#/components/schemas/CoverLabel"},"type":"array","title":"Labels","description":"Names of the largest areas inside, at a point inside each"},"km_per_px":{"type":"number","title":"Km Per Px","description":"Kilometres on the ground per pixel, for a scale bar"},"within":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Within","description":"The SA4 a small place is in, e.g. 'Melbourne - North West'"}},"type":"object","required":["width","height","place","outline","inner","around","labels","km_per_px","within"],"title":"CoverMap"},"CoverMapRequest":{"properties":{"region_ids":{"items":{"type":"string"},"type":"array","maxItems":60,"minItems":1,"title":"Region Ids","description":"The place's regions: one region, a saved area's, or Australia's states"},"width":{"type":"integer","maximum":2000.0,"minimum":100.0,"title":"Width","description":"The map, in pixels","default":420},"height":{"type":"integer","maximum":2000.0,"minimum":100.0,"title":"Height","default":476}},"type":"object","required":["region_ids"],"title":"CoverMapRequest"},"Criterion":{"properties":{"metric_id":{"type":"string","title":"Metric Id","description":"Any metric, e.g. pct_renting"},"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min","description":"Lowest value allowed (inclusive)"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max","description":"Highest value allowed (inclusive)"}},"type":"object","required":["metric_id"],"title":"Criterion"},"Editions":{"properties":{"country_code":{"type":"string","title":"Country Code"},"region_year":{"type":"integer","title":"Region Year","description":"The boundary edition regions, areas, search and the map use, e.g. 2026"},"census_year":{"type":"integer","title":"Census Year","description":"The latest census with results: headline figures, carried onto region_year's regions when it's earlier, e.g. 2021"},"census_years":{"items":{"type":"integer"},"type":"array","title":"Census Years","description":"Every census with results, oldest first"}},"type":"object","required":["country_code","region_year","census_year","census_years"],"title":"Editions"},"ExcludeNear":{"properties":{"points":{"items":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},"type":"array","maxItems":500,"title":"Points","description":"[lng, lat] of each point, e.g. your sites"},"km":{"type":"number","maximum":50.0,"exclusiveMinimum":0.0,"title":"Km"}},"type":"object","required":["points","km"],"title":"ExcludeNear"},"FigureGap":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value","description":"This place's figure"},"target":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target","description":"The starting place's figure"},"gap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gap","description":"How far apart, in standard deviations (+ when this place is higher)"}},"type":"object","required":["metric_id","label","value","target"],"title":"FigureGap"},"FigureValue":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"}},"type":"object","required":["metric_id","label","value"],"title":"FigureValue"},"FindRequest":{"properties":{"geography":{"type":"string","enum":["SAL","POA","SA2","SA3","SA4","LGA"],"title":"Geography","description":"The level to rank: suburbs (SAL), postcodes, SA2-SA4 or councils","default":"SAL"},"region_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Id","description":"Start from a standard region: find places like it"},"target":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Target","description":"Or start from any place's figures (a pin, a saved area): metric_id -> value, for the figures in seed similarity_features. Leave both out to use criteria only."},"topics":{"anyOf":[{"items":{"type":"string","enum":["people","money","housing","households","work"]},"type":"array"},{"type":"null"}],"title":"Topics","description":"Match on these topics only; all of them if left out"},"metrics":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Metrics","description":"Or match on these figures only (metric_ids from seed similarity_features); within topics, if given"},"criteria":{"items":{"$ref":"#/components/schemas/Criterion"},"type":"array","maxItems":12,"title":"Criteria","description":"Every result must meet all of these","default":[]},"within":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Within","description":"A state (STE region_id) results must be in; or a city region (GCCSA) for SA2-SA4"},"near":{"anyOf":[{"$ref":"#/components/schemas/Near"},{"type":"null"}],"description":"Results within km of a point (by the centre of their outline)"},"min_population":{"type":"integer","minimum":0.0,"title":"Min Population","description":"Leave out smaller places, whose figures swing","default":1000},"exclude":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Exclude","description":"region_ids to leave out (the starting place is always left out)","default":[]},"exclude_near":{"anyOf":[{"$ref":"#/components/schemas/ExcludeNear"},{"type":"null"}],"description":"Leave out places whose centre is within km of any of these points, e.g. where you already have a site"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":20}},"type":"object","title":"FindRequest"},"FindResult":{"properties":{"region_id":{"type":"string","title":"Region Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"geography":{"type":"string","title":"Geography"},"state_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Name"},"population":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Population"},"match_pct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Match Pct","description":"100 = the same on every figure, 50 = typically one standard deviation apart; null for criteria-only searches"},"distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance","description":"Root mean square gap in z (see gold.region_features)"},"closest":{"items":{"$ref":"#/components/schemas/FigureGap"},"type":"array","title":"Closest","description":"The figures it matches best, closest first"},"furthest":{"items":{"$ref":"#/components/schemas/FigureGap"},"type":"array","title":"Furthest","description":"The figures it differs on most, furthest first"},"criteria":{"items":{"$ref":"#/components/schemas/FigureValue"},"type":"array","title":"Criteria","description":"Its figures for the request's criteria, in their order","default":[]},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng","description":"Map position: the centre of its outline (null before a boundary load)"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},"type":"object","required":["region_id","name","geography","state_name","population","match_pct","distance","closest","furthest"],"title":"FindResult"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Link":{"properties":{"url":{"type":"string","title":"Url","description":"Stripe's page to send the browser to"}},"type":"object","required":["url"],"title":"Link"},"MapEnd":{"properties":{"region_id":{"type":"string","title":"Region Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"value":{"type":"number","title":"Value"}},"type":"object","required":["region_id","name","value"],"title":"MapEnd"},"MapValues":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"geography":{"type":"string","title":"Geography"},"census_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Census Year","description":"The census the figures are from"},"region_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Region Year","description":"The boundary edition the regions are from"},"bands_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bands Year","description":"The year whose figures set the bands: census_year, or for a projected year the latest census, so the colours show what moved"},"breaks":{"items":{"type":"number"},"type":"array","title":"Breaks","description":"The four edges between the five colour bands: the level's quintiles, rounded to tidy numbers. A region is in band n when n edges are at or below its value"},"bins":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bins","description":"region_id -> its band, 0 (lowest) to 4, for every region of the level that has a value. The values themselves aren't sent: a place's own figures come from its own endpoints, counted against the daily limits"},"near_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Near Km","description":"With near_lng and near_lat: the radius shaded (10 km for suburbs, wider until there are 20 places of 1,000 people or more), and the bands are those places' quintiles"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count","description":"With near: how many places of 1,000 people or more are shaded (smaller ones are shaded too, but don't set the bands)"},"low":{"anyOf":[{"$ref":"#/components/schemas/MapEnd"},{"type":"null"}],"description":"With near: the lowest place shaded, and its figure"},"high":{"anyOf":[{"$ref":"#/components/schemas/MapEnd"},{"type":"null"}],"description":"With near: the highest place shaded, and its figure"}},"type":"object","required":["metric_id","geography","census_year","region_year","breaks","bins"],"title":"MapValues"},"Metric":{"properties":{"metric_id":{"type":"string","title":"Metric Id","description":"Stable id, e.g. median_rent_weekly"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"topic":{"type":"string","title":"Topic","description":"population, labour, education, income or housing"},"kind":{"type":"string","enum":["sum","ratio","median"],"title":"Kind"},"unit":{"type":"string","title":"Unit","description":"Unit of the values, e.g. persons, percent, dollars per week"},"scale":{"type":"number","title":"Scale"},"tolerance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tolerance","description":"How far values may differ from ABS's own figure, in unit"},"synonyms":{"items":{"type":"string"},"type":"array","title":"Synonyms"},"countries":{"items":{"type":"string"},"type":"array","title":"Countries"},"census_years":{"items":{"type":"integer"},"type":"array","title":"Census Years"},"has_published":{"type":"boolean","title":"Has Published","description":"ABS publishes its own figure for standard regions (abs_value)"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period","description":"For a figure from another source than the census (household spending, unemployment now, DSS payments): the period it covers, e.g. \"the four quarters to June 2026 (smoothed)\""},"source":{"type":"string","title":"Source","description":"Where it comes from: 'census', or for a modelled figure 'salm' (DEWR's Small Area Labour Markets), 'dss' (DSS payments) or 'household_spending' (ABS's Monthly Household Spending Indicator)","default":"census"},"projected_years":{"items":{"type":"integer"},"type":"array","title":"Projected Years","description":"Years after the census it has projections for (not those that hold its census figure)","default":[]},"from_bands":{"type":"boolean","title":"From Bands","description":"Worked out from bands (a median, housing stress) rather than counted","default":false}},"type":"object","required":["metric_id","label","description","topic","kind","unit","scale","tolerance","synonyms","countries","census_years","has_published"],"title":"Metric"},"MetricValue":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"label":{"type":"string","title":"Label"},"unit":{"type":"string","title":"Unit"},"region_id":{"type":"string","title":"Region Id"},"region_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Name"},"geography":{"type":"string","title":"Geography"},"census_year":{"type":"integer","title":"Census Year"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value","description":"Computed from the metric's recipe, the same way as for custom areas"},"base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base","description":"What the value rests on (denominator, banded total, or the sum). Small bases mean noisy values."},"value_is_floor":{"type":"boolean","title":"Value Is Floor","description":"The median is in the open-ended top band, so value is that band's lower edge"},"basis":{"type":"string","enum":["census","carried","projected","trend","modelled"],"title":"Basis","description":"'census': the region's own census. 'carried': an earlier census's counts carried onto the region with ABS's population-weighted correspondences, e.g. 2021 figures for a 2026 region. 'projected': a year after the latest census, for metrics built from people by age and sex. 'trend': a year after the latest census, a share moved by its trend or held at the latest census, or a dollar figure in that year's dollars. 'modelled': household spending, modelled from the ABS Monthly Household Spending Indicator for the 12 months to its latest release (that year)"},"estimated":{"type":"boolean","title":"Estimated","description":"Not ABS's own count for exactly this region: a carried value where the boundary changed. Carried values for unchanged regions are exact"},"abs_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Abs Value","description":"ABS's published figure, where there is one; prefer it for standard regions"}},"type":"object","required":["metric_id","label","unit","region_id","region_name","geography","census_year","value","base","value_is_floor","basis","estimated","abs_value"],"title":"MetricValue"},"Near":{"properties":{"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"km":{"type":"number","maximum":500.0,"exclusiveMinimum":0.0,"title":"Km"}},"type":"object","required":["lng","lat","km"],"title":"Near"},"PlaceList":{"properties":{"list_id":{"type":"string","title":"List Id"},"name":{"type":"string","title":"Name"},"bench_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bench Key"},"metric_ids":{"items":{"type":"string"},"type":"array","title":"Metric Ids"},"sort_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort Metric"},"sort_desc":{"type":"boolean","title":"Sort Desc"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"place_count":{"type":"integer","title":"Place Count"},"places":{"items":{"type":"string"},"type":"array","title":"Places","description":"The places, in order"}},"type":"object","required":["list_id","name","bench_key","metric_ids","sort_metric","sort_desc","created_at","updated_at","place_count","places"],"title":"PlaceList"},"PlaceListCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"places":{"items":{"type":"string"},"type":"array","maxItems":50,"title":"Places","description":"The places, in order, as the web app's profile keys: a region_id, 'area:<id>' for a saved area, or a pin ('pin:<lng>_<lat>_<km>')"},"bench_key":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bench Key","description":"The row above the places; null for Australia"},"metric_ids":{"items":{"type":"string"},"type":"array","maxItems":12,"title":"Metric Ids","description":"The figures shown as columns, in order; empty for the defaults","default":[]},"sort_metric":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Sort Metric","description":"The column the places are ranked by"},"sort_desc":{"type":"boolean","title":"Sort Desc","description":"Highest first","default":true}},"type":"object","required":["name","places"],"title":"PlaceListCreate"},"PlaceListSummary":{"properties":{"list_id":{"type":"string","title":"List Id"},"name":{"type":"string","title":"Name"},"bench_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bench Key"},"metric_ids":{"items":{"type":"string"},"type":"array","title":"Metric Ids"},"sort_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort Metric"},"sort_desc":{"type":"boolean","title":"Sort Desc"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"place_count":{"type":"integer","title":"Place Count"}},"type":"object","required":["list_id","name","bench_key","metric_ids","sort_metric","sort_desc","created_at","updated_at","place_count"],"title":"PlaceListSummary"},"PlaceListUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"places":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Places","description":"The places, in order, as the web app's profile keys: a region_id, 'area:<id>' for a saved area, or a pin ('pin:<lng>_<lat>_<km>')"},"bench_key":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bench Key"},"metric_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":12},{"type":"null"}],"title":"Metric Ids","description":"The figures shown as columns, in order; empty for the defaults"},"sort_metric":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Sort Metric"},"sort_desc":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sort Desc"}},"type":"object","title":"PlaceListUpdate","description":"Only the fields given change. places replaces the list's places."},"Question":{"properties":{"question_id":{"type":"string","title":"Question Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"compared":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Compared"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"turns":{"items":{"$ref":"#/components/schemas/QuestionTurn"},"type":"array","title":"Turns"}},"type":"object","required":["question_id","title","compared","created_at","updated_at","turns"],"title":"Question"},"QuestionSummary":{"properties":{"question_id":{"type":"string","title":"Question Id"},"title":{"type":"string","title":"Title","description":"Claude's short title, or the question until it has one"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["question_id","title","created_at","updated_at"],"title":"QuestionSummary"},"QuestionTurn":{"properties":{"seq":{"type":"integer","title":"Seq","description":"0 for the question, then each follow-up"},"ask":{"type":"string","title":"Ask"},"status":{"type":"string","enum":["writing","done","failed"],"title":"Status"},"steps":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Steps","description":"How Claude got there: [{tool, input, brief}]"},"blocks":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Blocks","description":"The tables and charts: [{kind, metrics, rows, benchmark}]"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"},"follow_ups":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Follow Ups"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["seq","ask","status","steps","blocks","answer","follow_ups","model","error","created_at","finished_at"],"title":"QuestionTurn"},"RecentMeasure":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"question_id":{"type":"string","title":"Question Id","description":"The question whose answer used it last"},"title":{"type":"string","title":"Title","description":"That question's title"}},"type":"object","required":["metric_id","question_id","title"],"title":"RecentMeasure"},"Region":{"properties":{"region_id":{"type":"string","title":"Region Id","description":"Stable id, <country>_<year>_<geography>_<code>, e.g. AU_2021_SA2_101021007"},"country_code":{"type":"string","title":"Country Code"},"census_year":{"type":"integer","title":"Census Year"},"geography":{"type":"string","title":"Geography","description":"e.g. SA1, SA2, SA3, SA4, GCCSA, STE, LGA, POA, SAL, or POW_SA2 for place of work"},"level_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level Name"},"code":{"type":"string","title":"Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"area_sqkm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Area Sqkm"},"sa2_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sa2 Code","description":"Parents in the ASGS main structure (SA1 to state regions only)"},"sa2_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sa2 Name"},"sa3_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sa3 Code"},"sa3_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sa3 Name"},"sa4_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sa4 Code"},"sa4_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sa4 Name"},"gccsa_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gccsa Code"},"gccsa_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gccsa Name"},"state_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Code"},"state_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Name"},"population":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Population","description":"Its people at the latest census (search results only)"},"postcode_suburbs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Postcode Suburbs","description":"A postcode's largest suburbs, by the people they share, up to three (search results only)"},"bbox":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Bbox","description":"[west, south, east, north] in longitude/latitude, for zooming a map to the region; one region only, and only for levels the map draws"}},"type":"object","required":["region_id","country_code","census_year","geography","level_name","code","name","area_sqkm","sa2_code","sa2_name","sa3_code","sa3_name","sa4_code","sa4_name","gccsa_code","gccsa_name","state_code","state_name"],"title":"Region"},"Report":{"properties":{"report_id":{"type":"string","title":"Report Id"},"place_key":{"type":"string","title":"Place Key"},"place_name":{"type":"string","title":"Place Name"},"bench_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bench Key"},"bench_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bench Name"},"status":{"type":"string","enum":["writing","done","failed"],"title":"Status","description":"writing (about half a minute), done or failed"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"The Claude model that wrote the words; null when the rules wrote them"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"review":{"anyOf":[{"type":"string","enum":["requested","done"]},{"type":"null"}],"title":"Review","description":"A reviewed report: requested once paid for, done once reviewed"},"text":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Text","description":"The words: {glance: {headline, sub}, population, households, size, income, ancestry, language, religion, meaning_title, council: [{lead, text}], developers}; a null slot (or text) is drawn with the rules' words"}},"type":"object","required":["report_id","place_key","place_name","bench_key","bench_name","status","model","error","created_at","finished_at","text"],"title":"Report"},"ReportCreate":{"properties":{"place_key":{"type":"string","maxLength":500,"minLength":1,"title":"Place Key","description":"The place's profile key, e.g. AU_2026_LGA_LGA25060"},"place_name":{"type":"string","maxLength":300,"minLength":1,"title":"Place Name"},"level":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Level","description":"What kind of place, e.g. Local government area"},"bench_key":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bench Key","description":"What it's measured against; null for Australia"},"bench_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Bench Name"},"years":{"items":{"type":"integer"},"type":"array","maxItems":12,"minItems":1,"title":"Years","description":"The years of each row, e.g. [2011, 2016, 2021, 2026, 2031]"},"projected_from":{"type":"integer","title":"Projected From","description":"The first projected year, e.g. 2026"},"rows":{"items":{"$ref":"#/components/schemas/ReportRow"},"type":"array","maxItems":600,"minItems":1,"title":"Rows","description":"The figures the slides draw"}},"type":"object","required":["place_key","place_name","years","projected_from","rows"],"title":"ReportCreate"},"ReportRow":{"properties":{"id":{"type":"string","maxLength":200,"minLength":1,"title":"Id","description":"The metric_id, e.g. pct_aged_65_plus"},"label":{"type":"string","maxLength":300,"minLength":1,"title":"Label","description":"Its label, as the slides show it"},"place":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array","maxItems":12,"title":"Place","description":"The place's value in each of years"},"bench":{"anyOf":[{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array","maxItems":12},{"type":"null"}],"title":"Bench","description":"The benchmark's, in each of years"},"base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base","description":"What the place's latest value rests on (small bases are noisy)"}},"type":"object","required":["id","label","place"],"title":"ReportRow"},"ReportSummary":{"properties":{"report_id":{"type":"string","title":"Report Id"},"place_key":{"type":"string","title":"Place Key"},"place_name":{"type":"string","title":"Place Name"},"bench_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bench Key"},"bench_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bench Name"},"status":{"type":"string","enum":["writing","done","failed"],"title":"Status","description":"writing (about half a minute), done or failed"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"The Claude model that wrote the words; null when the rules wrote them"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"review":{"anyOf":[{"type":"string","enum":["requested","done"]},{"type":"null"}],"title":"Review","description":"A reviewed report: requested once paid for, done once reviewed"}},"type":"object","required":["report_id","place_key","place_name","bench_key","bench_name","status","model","error","created_at","finished_at"],"title":"ReportSummary"},"SavedAreaValue":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"label":{"type":"string","title":"Label"},"unit":{"type":"string","title":"Unit"},"census_year":{"type":"integer","title":"Census Year"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base"},"value_is_floor":{"type":"boolean","title":"Value Is Floor"},"basis":{"type":"string","enum":["census","carried","projected","trend","modelled"],"title":"Basis","description":"'census': the region's own census. 'carried': an earlier census's counts carried onto the region with ABS's population-weighted correspondences, e.g. 2021 figures for a 2026 region. 'projected': a year after the latest census, for metrics built from people by age and sex. 'trend': a year after the latest census, a share moved by its trend or held at the latest census, or a dollar figure in that year's dollars. 'modelled': household spending, modelled from the ABS Monthly Household Spending Indicator for the 12 months to its latest release (that year)"},"estimated":{"type":"boolean","title":"Estimated","description":"Not ABS's own counts for exactly these regions: a carried value where a boundary changed"},"area_id":{"type":"string","title":"Area Id"}},"type":"object","required":["metric_id","label","unit","census_year","value","base","value_is_floor","basis","estimated","area_id"],"title":"SavedAreaValue"},"SimilarRegion":{"properties":{"rank":{"type":"integer","title":"Rank"},"region_id":{"type":"string","title":"Region Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"state_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Name"},"match_pct":{"type":"integer","title":"Match Pct"},"distance":{"type":"number","title":"Distance"},"closest":{"items":{"$ref":"#/components/schemas/FigureGap"},"type":"array","title":"Closest","description":"The figures it matches best, closest first (up to three)","default":[]}},"type":"object","required":["rank","region_id","name","state_name","match_pct","distance"],"title":"SimilarRegion"},"Site":{"properties":{"site_id":{"type":"string","title":"Site Id"},"name":{"type":"string","title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"located":{"type":"string","enum":["given","address","suburb","postcode","manual","none"],"title":"Located","description":"How the site was placed: 'given' (its own latitude and longitude), 'address' (a street address), 'suburb' or 'postcode' (the middle of one: roughly, so check it), 'manual' (placed on the map) or 'none' (not placed yet)"},"performance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Performance","description":"How the site performs; null leaves it out of the analysis"},"catchment_regions":{"type":"integer","title":"Catchment Regions","description":"SA1s with people inside its catchment (0 until it has a place)"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["site_id","name","address","lng","lat","located","performance","catchment_regions","created_at","updated_at"],"title":"Site"},"SiteContrast":{"properties":{"ready":{"type":"boolean","title":"Ready","description":"false under 9 sites with a figure and a place"},"sites_used":{"type":"integer","title":"Sites Used"},"needed":{"type":"integer","title":"Needed","description":"How many more sites with a figure and a place it needs"},"group_size":{"type":"integer","title":"Group Size","description":"Sites in each third"},"ranked":{"items":{"type":"string"},"type":"array","title":"Ranked","description":"The sites used, best first (site_ids)"},"best":{"items":{"type":"string"},"type":"array","title":"Best","description":"The best third, best first (site_ids)"},"rest":{"items":{"type":"string"},"type":"array","title":"Rest","description":"The bottom third"},"figures":{"items":{"$ref":"#/components/schemas/ContrastFigure"},"type":"array","title":"Figures","description":"The headline figures, largest gap first"},"shown":{"items":{"type":"string"},"type":"array","title":"Shown","description":"The figures that set the best sites apart, at most five"},"shown_under":{"items":{"type":"string"},"type":"array","title":"Shown Under","description":"The figures that set the underperforming sites (the bottom third) apart from the rest, at most five"},"measure_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measure Label"},"higher_is_better":{"type":"boolean","title":"Higher Is Better"}},"type":"object","required":["ready","sites_used","needed","group_size","ranked","best","rest","figures","shown","shown_under","measure_label","higher_is_better"],"title":"SiteContrast"},"SiteCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"lng":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lng"},"lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"},"performance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Performance"}},"type":"object","required":["name"],"title":"SiteCreate","description":"A site: give lng and lat, or an address (a suburb or postcode in it places the site roughly), or neither and\nplace it later."},"SiteFound":{"properties":{"kind":{"type":"string","const":"site","title":"Kind","default":"site"},"site_id":{"type":"string","title":"Site Id"},"set_id":{"type":"string","title":"Set Id"},"name":{"type":"string","title":"Name"},"set_name":{"type":"string","title":"Set Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"located":{"type":"string","enum":["given","address","suburb","postcode","manual","none"],"title":"Located"},"radius_km":{"type":"number","title":"Radius Km","description":"Its set's catchment radius"},"travel_mode":{"anyOf":[{"type":"string","enum":["drive","walk"]},{"type":"null"}],"title":"Travel Mode","description":"Its set's catchment by travel time, if it has one"},"travel_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Travel Minutes"}},"type":"object","required":["site_id","set_id","name","set_name","address","lng","lat","located","radius_km","travel_mode","travel_minutes"],"title":"SiteFound"},"SitePreview":{"properties":{"name":{"type":"string","title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"located":{"type":"string","enum":["given","address","suburb","postcode","manual","none"],"title":"Located"},"performance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Performance"}},"type":"object","required":["name","address","lng","lat","located","performance"],"title":"SitePreview"},"SiteSet":{"properties":{"set_id":{"type":"string","title":"Set Id"},"name":{"type":"string","title":"Name"},"measure_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measure Label"},"higher_is_better":{"type":"boolean","title":"Higher Is Better"},"radius_km":{"type":"number","title":"Radius Km"},"travel_mode":{"anyOf":[{"type":"string","enum":["drive","walk"]},{"type":"null"}],"title":"Travel Mode","description":"Catchments by travel time: minutes' drive or walk from each site, instead of the radius; null for the radius"},"travel_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Travel Minutes"},"census_year":{"type":"integer","title":"Census Year","description":"The boundary edition its catchments are built from"},"site_count":{"type":"integer","title":"Site Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"sites":{"items":{"$ref":"#/components/schemas/Site"},"type":"array","title":"Sites"}},"type":"object","required":["set_id","name","measure_label","higher_is_better","radius_km","travel_mode","travel_minutes","census_year","site_count","created_at","updated_at","sites"],"title":"SiteSet"},"SiteSetCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"measure_label":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Measure Label","description":"What performance measures, e.g. \"Weekly sales\""},"higher_is_better":{"type":"boolean","title":"Higher Is Better","description":"Whether a higher figure is a better site (false for, say, costs)","default":true},"radius_km":{"type":"number","maximum":10.0,"minimum":1.0,"title":"Radius Km","description":"Each site's catchment: a circle of this radius","default":3},"travel_mode":{"anyOf":[{"type":"string","enum":["drive","walk"]},{"type":"null"}],"title":"Travel Mode","description":"Or catchments by travel time: travel_minutes' drive or walk from each site (without traffic), instead of the radius"},"travel_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Travel Minutes","description":"drive: 5, 10, 15, 20 or 30; walk: 5, 10, 15 or 20"}},"type":"object","required":["name"],"title":"SiteSetCreate"},"SiteSetSummary":{"properties":{"set_id":{"type":"string","title":"Set Id"},"name":{"type":"string","title":"Name"},"measure_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measure Label"},"higher_is_better":{"type":"boolean","title":"Higher Is Better"},"radius_km":{"type":"number","title":"Radius Km"},"travel_mode":{"anyOf":[{"type":"string","enum":["drive","walk"]},{"type":"null"}],"title":"Travel Mode","description":"Catchments by travel time: minutes' drive or walk from each site, instead of the radius; null for the radius"},"travel_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Travel Minutes"},"census_year":{"type":"integer","title":"Census Year","description":"The boundary edition its catchments are built from"},"site_count":{"type":"integer","title":"Site Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["set_id","name","measure_label","higher_is_better","radius_km","travel_mode","travel_minutes","census_year","site_count","created_at","updated_at"],"title":"SiteSetSummary"},"SiteSetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"measure_label":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Measure Label"},"higher_is_better":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Higher Is Better"},"radius_km":{"anyOf":[{"type":"number","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Radius Km"},"travel_mode":{"anyOf":[{"type":"string","enum":["drive","walk"]},{"type":"null"}],"title":"Travel Mode","description":"Or catchments by travel time: travel_minutes' drive or walk from each site (without traffic), instead of the radius"},"travel_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Travel Minutes","description":"drive: 5, 10, 15, 20 or 30; walk: 5, 10, 15 or 20"}},"type":"object","title":"SiteSetUpdate","description":"Only the fields given change. A new catchment (radius, or travel time) redoes every site's catchment;\ntravel_mode null goes back to the radius."},"SiteUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"lng":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lng"},"lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"},"performance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Performance"}},"type":"object","title":"SiteUpdate","description":"Only the fields given change. Moving a site (lng and lat) marks it placed by hand and redoes its catchment."},"SiteUpload":{"properties":{"csv":{"type":"string","maxLength":5000000,"title":"Csv","description":"The spreadsheet saved as CSV (commas, tabs or semicolons), a row of column names first"},"mapping":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"propertyNames":{"enum":["name","address","suburb","postcode","state","lat","lng","performance"]},"type":"object"},{"type":"null"}],"title":"Mapping","description":"Which column is which: {field: column name}. Left out, it is guessed (and returned)"},"dry_run":{"type":"boolean","title":"Dry Run","description":"Read and place the sites, but save nothing: to check the mapping first","default":false},"replace":{"type":"boolean","title":"Replace","description":"In place of the set's sites, rather than added to them","default":false}},"type":"object","required":["csv"],"title":"SiteUpload"},"SiteValue":{"properties":{"metric_id":{"type":"string","title":"Metric Id"},"label":{"type":"string","title":"Label"},"unit":{"type":"string","title":"Unit"},"census_year":{"type":"integer","title":"Census Year"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base"},"value_is_floor":{"type":"boolean","title":"Value Is Floor"},"basis":{"type":"string","enum":["census","carried","projected","trend","modelled"],"title":"Basis","description":"'census': the region's own census. 'carried': an earlier census's counts carried onto the region with ABS's population-weighted correspondences, e.g. 2021 figures for a 2026 region. 'projected': a year after the latest census, for metrics built from people by age and sex. 'trend': a year after the latest census, a share moved by its trend or held at the latest census, or a dollar figure in that year's dollars. 'modelled': household spending, modelled from the ABS Monthly Household Spending Indicator for the 12 months to its latest release (that year)"},"estimated":{"type":"boolean","title":"Estimated","description":"Not ABS's own counts for exactly these regions: a carried value where a boundary changed"},"site_id":{"type":"string","title":"Site Id"}},"type":"object","required":["metric_id","label","unit","census_year","value","base","value_is_floor","basis","estimated","site_id"],"title":"SiteValue"},"Subscribe":{"properties":{"plan":{"type":"string","enum":["base","full"],"title":"Plan","description":"Explore (base) or Analyse (full)","default":"full"},"interval":{"type":"string","enum":["month","year"],"title":"Interval","description":"Billed monthly or annually","default":"month"}},"type":"object","title":"Subscribe"},"Switch":{"properties":{"plan":{"anyOf":[{"type":"string","enum":["base","full"]},{"type":"null"}],"title":"Plan","description":"Straight to changing your subscription to this plan (Explore or Analyse)"},"interval":{"type":"string","enum":["month","year"],"title":"Interval","description":"… billed monthly or annually","default":"month"}},"type":"object","title":"Switch"},"TravelShape":{"properties":{"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"},"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"mode":{"type":"string","enum":["drive","walk"],"title":"Mode"},"minutes":{"type":"integer","title":"Minutes","description":"drive: 5, 10, 15, 20 or 30; walk: 5, 10, 15 or 20"},"geometry":{"additionalProperties":true,"type":"object","title":"Geometry","description":"Where you can get to in that time, without traffic: a GeoJSON Polygon or MultiPolygon, to draw, or to send as geojson for its figures"}},"type":"object","required":["lng","lat","mode","minutes","geometry"],"title":"TravelShape"},"UploadProblem":{"properties":{"row":{"type":"integer","title":"Row","description":"The spreadsheet's row number (the column names are row 1)"},"message":{"type":"string","title":"Message"}},"type":"object","required":["row","message"],"title":"UploadProblem"},"UploadResult":{"properties":{"headers":{"items":{"type":"string"},"type":"array","title":"Headers"},"mapping":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Mapping","description":"Which column was read as which field"},"measure_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measure Label","description":"The figure's column name: a label for it"},"located":{"additionalProperties":{"type":"integer"},"type":"object","title":"Located","description":"Sites by how they were placed, e.g. {\"given\": 38, \"suburb\": 4, \"none\": 2}"},"problems":{"items":{"$ref":"#/components/schemas/UploadProblem"},"type":"array","title":"Problems"},"sites":{"items":{"$ref":"#/components/schemas/SitePreview"},"type":"array","title":"Sites"},"site_ids":{"items":{"type":"string"},"type":"array","title":"Site Ids","description":"The sites added, in order (none for a dry run)"}},"type":"object","required":["headers","mapping","measure_label","located","problems","sites","site_ids"],"title":"UploadResult"},"Usage":{"properties":{"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan","description":"trial, base or full; ended once a trial is over; null when the limits are off"},"limits":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object","title":"Limits","description":"per_minute, places, map, find, background (a day), reports, requests (a month), sites, projections (1 or 0); null: no limit"},"used":{"additionalProperties":{"type":"integer"},"type":"object","title":"Used","description":"Today's use of each daily limit"},"month":{"additionalProperties":{"type":"integer"},"type":"object","title":"Month","description":"This month's reports (yours) and requests (your team's)","default":{}},"credits":{"additionalProperties":{"type":"integer"},"type":"object","title":"Credits","description":"Reports and requests bought, left to use once the month's are","default":{}},"sites":{"type":"integer","title":"Sites","description":"Your sites, across your site sets","default":0},"team":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team","description":"Your organisation, whose members share the month's requests"},"trial_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Ends At","description":"When your trial ends (or ended)"},"resets_at":{"type":"string","format":"date-time","title":"Resets At","description":"The next midnight, Sydney time"},"month_resets_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Month Resets At","description":"The next 1st of the month, Sydney time"},"plans":{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object"},"type":"object","title":"Plans","description":"The paid plans' limits, to compare: base, full","default":{}}},"type":"object","required":["plan","limits","used","resets_at"],"title":"Usage"},"UsageEvent":{"properties":{"key":{"type":"string","maxLength":500,"minLength":1,"title":"Key","description":"The place's profile key, e.g. AU_2026_SAL_SAL20362"}},"type":"object","required":["key"],"title":"UsageEvent"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","description":"The access token from Supabase Auth: the frontend's session.access_token after signing in","scheme":"bearer"}}}}