{
  "openapi": "3.1.0",
  "info": {
    "title": "baseray API",
    "version": "1.0.0",
    "description": "The baseray API gives programmatic read access to baseray's building catalogue for Romania and Czechia: each building's footprint, height, volume, floors, category, address, rooftop solar potential, whether solar panels are already on the roof, and the businesses whose registered office is at its address.\n\n## Authentication\nEvery endpoint except this document needs a workspace API key, sent as a bearer token:\n\n    Authorization: Bearer br_live_…\n\nCreate keys in the baseray app under **Settings → API keys**. A key is shown once, when it is created; store it as a secret. A key stops working when it is revoked, when it expires, or when the person who created it leaves the workspace. Cookies, sessions and other tokens are not accepted.\n\n## Rate limits and quotas\nEach key may make 60 requests a minute, and all of a workspace's keys together 5,000 requests a UTC day. Every authenticated response carries `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` (seconds until the minute window resets) for the key, and `X-Daily-Quota-Limit` and `X-Daily-Quota-Remaining` for the workspace. Past a limit the API answers `429` with `rate_limited` or `quota_exceeded` and a `Retry-After` header in seconds.\n\n## Errors\nEvery non-2xx response has the same body: `{\"error\": {\"code\": \"...\", \"message\": \"...\", \"parameter\": \"...\"}}`. `code` is stable and machine-readable; `message` is for people; `parameter` names the query or path parameter at fault for `invalid_parameter`. Unknown query parameters are refused rather than ignored.\n\n## Pagination\n`GET /buildings` returns one ranked page: `meta.total` counts every match (up to 10,000; `meta.total_is_capped` is true when counting stopped there), and `links.next` is the URL of the next page, or null on the last one. `offset + limit` may not exceed 10,000; to reach further, narrow the area.\n\n## Values\nField names are snake_case, lengths in metres, areas in m², volumes in m³, dates `YYYY-MM-DD`, timestamps ISO 8601 UTC. A value baseray has no record of is `null`, meaning unknown, never zero. Values marked `estimated` are modelled, not measured. A business registered at an address is never evidence that it owns or occupies the building.",
    "contact": {
      "name": "baseray",
      "url": "https://baseray.ai"
    }
  },
  "servers": [
    {
      "url": "https://api.baseray.ai/v1"
    }
  ],
  "security": [
    {
      "apiKey": []
    }
  ],
  "tags": [
    {
      "name": "Buildings",
      "description": "Search, look up and read buildings."
    },
    {
      "name": "Registered businesses",
      "description": "Businesses whose registered office is a building's address. A registered office is never ownership or occupancy."
    },
    {
      "name": "Meta",
      "description": "This document."
    }
  ],
  "paths": {
    "/buildings": {
      "get": {
        "tags": [
          "Buildings"
        ],
        "operationId": "listBuildings",
        "summary": "Buildings in an area, ranked",
        "description": "One ranked page of the buildings inside `bbox` that pass every filter given. Filters of different names combine with AND; the values of one list filter combine with OR.",
        "parameters": [
          {
            "name": "bbox",
            "in": "query",
            "required": true,
            "description": "The area to search: `minLon,minLat,maxLon,maxLat` in WGS84 degrees. Each side may span at most 3 degrees; search a county, city or district.",
            "schema": {
              "type": "string",
              "pattern": "^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?$"
            },
            "x-group": "Area and paging",
            "example": "25.55,45.60,25.68,45.70"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Ranking, largest first: `volume` (m³), `area` (footprint, m²), `height` (m), `registered_business_turnover` (the largest latest turnover of a business registered at the address) or `registered_business_employees` (the largest stated size; a band ranks where it starts, so 10–19 ranks as 10).",
            "schema": {
              "type": "string",
              "enum": [
                "volume",
                "area",
                "height",
                "registered_business_turnover",
                "registered_business_employees"
              ],
              "default": "volume"
            },
            "x-group": "Area and paging"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Buildings per page, 1 to 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            },
            "x-group": "Area and paging"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Buildings to skip, for the next page. `offset + limit` must be at most 10,000; past that, narrow `bbox`.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10000,
              "default": 0
            },
            "x-group": "Area and paging"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Keep buildings of any of these categories. Repeat the parameter or give a comma list: `category=commercial,industrial`. `ancillary` is an annex or outbuilding.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "residential_house",
                  "apartment_block",
                  "commercial",
                  "industrial",
                  "public",
                  "agricultural",
                  "ancillary",
                  "unknown"
                ]
              },
              "uniqueItems": true
            },
            "x-group": "Building",
            "style": "form",
            "explode": true
          },
          {
            "name": "building_type",
            "in": "query",
            "required": false,
            "description": "Keep buildings of any of these granular types, combined with `category` by OR: e.g. `office`, `warehouse`, `school`, `apartments`, `garage`. Repeatable or a comma list.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^[a-z0-9_]{1,64}$"
              },
              "uniqueItems": true
            },
            "x-group": "Building",
            "style": "form",
            "explode": true
          },
          {
            "name": "roof_shape",
            "in": "query",
            "required": false,
            "description": "Keep buildings with any of these roof shapes. Repeatable or a comma list.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "gabled",
                  "hipped",
                  "flat",
                  "pyramidal",
                  "skillion",
                  "round",
                  "mansard",
                  "half_hipped",
                  "gambrel",
                  "dome"
                ]
              },
              "uniqueItems": true
            },
            "x-group": "Building",
            "style": "form",
            "explode": true
          },
          {
            "name": "min_floors",
            "in": "query",
            "required": false,
            "description": "At least this many floors above ground. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 500
            },
            "x-group": "Building"
          },
          {
            "name": "max_floors",
            "in": "query",
            "required": false,
            "description": "At most this many floors above ground. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 500
            },
            "x-group": "Building"
          },
          {
            "name": "min_dwellings",
            "in": "query",
            "required": false,
            "description": "At least this many dwellings, where known. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "x-group": "Building"
          },
          {
            "name": "max_dwellings",
            "in": "query",
            "required": false,
            "description": "At most this many dwellings, where known. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "x-group": "Building"
          },
          {
            "name": "min_entrances",
            "in": "query",
            "required": false,
            "description": "At least this many entrances (each listed address of the building counts as one). Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000000
            },
            "x-group": "Building"
          },
          {
            "name": "max_entrances",
            "in": "query",
            "required": false,
            "description": "At most this many entrances. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000000
            },
            "x-group": "Building"
          },
          {
            "name": "address_corroboration",
            "in": "query",
            "required": false,
            "description": "Keep buildings whose shown address is graded any of: `corroborated` (an independent record gives the same house number), `single_source` (only one record), `conflicting` (another record gives another number). Buildings shown without a house number match none.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "corroborated",
                  "single_source",
                  "conflicting"
                ]
              },
              "uniqueItems": true
            },
            "x-group": "Building",
            "style": "form",
            "explode": true
          },
          {
            "name": "min_area_m2",
            "in": "query",
            "required": false,
            "description": "Minimum ground footprint, in square metres.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Size"
          },
          {
            "name": "max_area_m2",
            "in": "query",
            "required": false,
            "description": "Maximum ground footprint, in square metres.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Size"
          },
          {
            "name": "min_height_m",
            "in": "query",
            "required": false,
            "description": "Minimum height, in metres. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000
            },
            "x-group": "Size"
          },
          {
            "name": "max_height_m",
            "in": "query",
            "required": false,
            "description": "Maximum height, in metres. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000
            },
            "x-group": "Size"
          },
          {
            "name": "min_volume_m3",
            "in": "query",
            "required": false,
            "description": "Minimum volume, in cubic metres. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Size"
          },
          {
            "name": "max_volume_m3",
            "in": "query",
            "required": false,
            "description": "Maximum volume, in cubic metres. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Size"
          },
          {
            "name": "measured_height_only",
            "in": "query",
            "required": false,
            "description": "Keep only buildings whose height is measured, not estimated.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Size"
          },
          {
            "name": "existing_solar_panels",
            "in": "query",
            "required": false,
            "description": "Keep buildings whose roof photo was checked for solar panels with any of these results. Buildings never checked, or whose photo was too coarse to check, match none. Repeatable or a comma list.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "detected",
                  "none_seen",
                  "unclear"
                ]
              },
              "uniqueItems": true
            },
            "x-group": "Roof and solar",
            "style": "form",
            "explode": true
          },
          {
            "name": "has_solar_potential",
            "in": "query",
            "required": false,
            "description": "Keep only buildings whose roof has a solar-potential estimate.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "min_panel_count",
            "in": "query",
            "required": false,
            "description": "At least this many solar panels fit on the roof. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "max_panel_count",
            "in": "query",
            "required": false,
            "description": "At most this many solar panels fit on the roof. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "min_capacity_kwp",
            "in": "query",
            "required": false,
            "description": "Minimum rooftop solar capacity, in kWp. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "max_capacity_kwp",
            "in": "query",
            "required": false,
            "description": "Maximum rooftop solar capacity, in kWp. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "min_yearly_energy_kwh",
            "in": "query",
            "required": false,
            "description": "Minimum yearly rooftop solar energy, in kWh. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "max_yearly_energy_kwh",
            "in": "query",
            "required": false,
            "description": "Maximum yearly rooftop solar energy, in kWh. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "min_co2_savings_kg_per_year",
            "in": "query",
            "required": false,
            "description": "Minimum CO₂ a rooftop solar installation would save, in kg a year. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "max_co2_savings_kg_per_year",
            "in": "query",
            "required": false,
            "description": "Maximum CO₂ a rooftop solar installation would save, in kg a year. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1000000000
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "has_3d_model",
            "in": "query",
            "required": false,
            "description": "Keep only buildings with a reconstructed 3D model of their roof.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Roof and solar"
          },
          {
            "name": "has_registered_business",
            "in": "query",
            "required": false,
            "description": "Keep only buildings with at least one active business whose registered office is the building's address. A registered office is never ownership or occupancy.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Registered businesses"
          },
          {
            "name": "registered_business_name",
            "in": "query",
            "required": false,
            "description": "Keep buildings where the name of a business registered at the address contains this text.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 120
            },
            "x-group": "Registered businesses"
          },
          {
            "name": "min_registered_business_turnover",
            "in": "query",
            "required": false,
            "description": "Minimum latest turnover of a business registered at the address, in whole units of `registered_business_turnover_currency` (required with it).",
            "schema": {
              "type": "integer"
            },
            "x-group": "Registered businesses"
          },
          {
            "name": "max_registered_business_turnover",
            "in": "query",
            "required": false,
            "description": "Maximum latest turnover of a business registered at the address, in whole units of `registered_business_turnover_currency` (required with it).",
            "schema": {
              "type": "integer"
            },
            "x-group": "Registered businesses"
          },
          {
            "name": "registered_business_turnover_currency",
            "in": "query",
            "required": false,
            "description": "ISO 4217 currency of the turnover bounds, e.g. `RON`, `CZK`, `EUR`. Required with a turnover bound.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Z]{3}$"
            },
            "x-group": "Registered businesses",
            "example": "RON"
          },
          {
            "name": "registered_business_financial_year",
            "in": "query",
            "required": false,
            "description": "Keep buildings whose registered business's latest financial statement is for this year.",
            "schema": {
              "type": "integer",
              "minimum": 1990,
              "maximum": 2100
            },
            "x-group": "Registered businesses"
          },
          {
            "name": "min_registered_business_employees",
            "in": "query",
            "required": false,
            "description": "At least this many employees in one business registered at the address, reading its whole stated size: a band counts only when all of it is at or above the value (10–19 matches 10, not 15). A business whose size is not stated never matches.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "x-group": "Registered businesses"
          },
          {
            "name": "max_registered_business_employees",
            "in": "query",
            "required": false,
            "description": "At most this many employees in every business registered at the address whose size is stated; an open-ended top band never matches.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "x-group": "Registered businesses"
          },
          {
            "name": "has_annual_heating_estimate",
            "in": "query",
            "required": false,
            "description": "Keep only buildings with an annual heating-demand estimate for the local climate.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "has_thermal_assessment",
            "in": "query",
            "required": false,
            "description": "Keep only buildings with a building-specific thermal assessment (energy certificate, audit, as-built model or survey).",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "has_peak_heat_load",
            "in": "query",
            "required": false,
            "description": "Keep only buildings whose thermal assessment supplies the design temperatures a peak heat load needs.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "has_recent_climate_trend",
            "in": "query",
            "required": false,
            "description": "Keep only buildings with a recent rolling climate average and trend at their location.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "has_recent_temperature_extremes",
            "in": "query",
            "required": false,
            "description": "Keep only buildings with a complete recent temperature-extremes profile at their location.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "has_recent_precipitation",
            "in": "query",
            "required": false,
            "description": "Keep only buildings with a complete recent precipitation profile at their location.",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "min_recent_frost_days",
            "in": "query",
            "required": false,
            "description": "At least this many frost days a year, averaged over recent complete years. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 366
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "max_recent_minimum_daily_temperature_c",
            "in": "query",
            "required": false,
            "description": "The coldest daily minimum of recent complete years is at most this, in °C. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": -100,
              "maximum": 100
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "min_recent_hot_days",
            "in": "query",
            "required": false,
            "description": "At least this many hot days a year, averaged over recent complete years. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 366
            },
            "x-group": "Energy and climate"
          },
          {
            "name": "min_recent_max_one_day_precipitation_mm",
            "in": "query",
            "required": false,
            "description": "The wettest single day of recent complete years brought at least this much precipitation, in mm. Buildings where this value is unknown are left out.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 5000
            },
            "x-group": "Energy and climate"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "X-Daily-Quota-Limit": {
                "$ref": "#/components/headers/X-Daily-Quota-Limit"
              },
              "X-Daily-Quota-Remaining": {
                "$ref": "#/components/headers/X-Daily-Quota-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildingPage"
                },
                "examples": {
                  "example": {
                    "summary": "Bulevardul 15 Noiembrie 78, Brașov, as read from the live app on 25 Sep 2026. `solar_potential` and `registered_business_count` were not part of that reading and are shown here as null and 0 for illustration only.",
                    "value": {
                      "data": [
                        {
                          "building_id": "c9eefd1b-8c8d-48fe-8b72-e015374d7720",
                          "address": "Bulevardul 15 Noiembrie 78",
                          "locality": "Brașov",
                          "country": "RO",
                          "latitude": 45.64988,
                          "longitude": 25.61044,
                          "category": "commercial",
                          "footprint_area_m2": 31252,
                          "height": {
                            "metres": 18,
                            "basis": "estimated"
                          },
                          "volume_m3": 562531,
                          "volume_basis": "estimated",
                          "floors": 16,
                          "existing_solar_panels": {
                            "status": "none_seen",
                            "photo_date": "2022-09-08",
                            "confidence": 0.988
                          },
                          "solar_potential": null,
                          "registered_business_count": 0,
                          "app_url": "https://app.baseray.ai/?building=c9eefd1b-8c8d-48fe-8b72-e015374d7720"
                        }
                      ],
                      "meta": {
                        "total": 1,
                        "total_is_capped": false,
                        "limit": 25,
                        "offset": 0,
                        "sort": "volume"
                      },
                      "links": {
                        "next": null
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidParameter"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          }
        }
      }
    },
    "/buildings/at": {
      "get": {
        "tags": [
          "Buildings"
        ],
        "operationId": "findBuildingsAtPoint",
        "summary": "Buildings at a point",
        "description": "The buildings whose outline lies within `radius_m` of a point, nearest first.",
        "parameters": [
          {
            "name": "lat",
            "in": "query",
            "required": true,
            "description": "Latitude of the point, WGS84.",
            "schema": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "example": 45.64988
          },
          {
            "name": "lon",
            "in": "query",
            "required": true,
            "description": "Longitude of the point, WGS84.",
            "schema": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            },
            "example": 25.61044
          },
          {
            "name": "radius_m",
            "in": "query",
            "required": false,
            "description": "How far from the point to look, in metres.",
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 200,
              "default": 25
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many buildings to return, nearest first.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "X-Daily-Quota-Limit": {
                "$ref": "#/components/headers/X-Daily-Quota-Limit"
              },
              "X-Daily-Quota-Remaining": {
                "$ref": "#/components/headers/X-Daily-Quota-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildingList"
                },
                "examples": {
                  "example": {
                    "summary": "Bulevardul 15 Noiembrie 78, Brașov, as read from the live app on 25 Sep 2026. `solar_potential` and `registered_business_count` were not part of that reading and are shown here as null and 0 for illustration only.",
                    "value": {
                      "data": [
                        {
                          "building_id": "c9eefd1b-8c8d-48fe-8b72-e015374d7720",
                          "address": "Bulevardul 15 Noiembrie 78",
                          "locality": "Brașov",
                          "country": "RO",
                          "latitude": 45.64988,
                          "longitude": 25.61044,
                          "category": "commercial",
                          "footprint_area_m2": 31252,
                          "height": {
                            "metres": 18,
                            "basis": "estimated"
                          },
                          "volume_m3": 562531,
                          "volume_basis": "estimated",
                          "floors": 16,
                          "existing_solar_panels": {
                            "status": "none_seen",
                            "photo_date": "2022-09-08",
                            "confidence": 0.988
                          },
                          "solar_potential": null,
                          "registered_business_count": 0,
                          "app_url": "https://app.baseray.ai/?building=c9eefd1b-8c8d-48fe-8b72-e015374d7720"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidParameter"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          }
        }
      }
    },
    "/buildings/{building_id}": {
      "get": {
        "tags": [
          "Buildings"
        ],
        "operationId": "getBuilding",
        "summary": "One building",
        "description": "One building's record. A building the catalogue no longer holds is still returned with `is_current` false and, where one now stands on its ground, `replaced_by_building_id`.",
        "parameters": [
          {
            "name": "building_id",
            "in": "path",
            "required": true,
            "description": "The building's baseray id, a UUID returned by the other building endpoints.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "c9eefd1b-8c8d-48fe-8b72-e015374d7720"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "X-Daily-Quota-Limit": {
                "$ref": "#/components/headers/X-Daily-Quota-Limit"
              },
              "X-Daily-Quota-Remaining": {
                "$ref": "#/components/headers/X-Daily-Quota-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BuildingDetailEnvelope"
                },
                "examples": {
                  "example": {
                    "summary": "Bulevardul 15 Noiembrie 78, Brașov, as read from the live app on 25 Sep 2026. `solar_potential` and `registered_business_count` were not part of that reading and are shown here as null and 0 for illustration only. `dwellings` and `entrances` are shown as null for illustration.",
                    "value": {
                      "data": {
                        "building_id": "c9eefd1b-8c8d-48fe-8b72-e015374d7720",
                        "address": "Bulevardul 15 Noiembrie 78",
                        "locality": "Brașov",
                        "country": "RO",
                        "latitude": 45.64988,
                        "longitude": 25.61044,
                        "category": "commercial",
                        "footprint_area_m2": 31252,
                        "height": {
                          "metres": 18,
                          "basis": "estimated"
                        },
                        "volume_m3": 562531,
                        "volume_basis": "estimated",
                        "floors": 16,
                        "existing_solar_panels": {
                          "status": "none_seen",
                          "photo_date": "2022-09-08",
                          "confidence": 0.988
                        },
                        "solar_potential": null,
                        "registered_business_count": 0,
                        "app_url": "https://app.baseray.ai/?building=c9eefd1b-8c8d-48fe-8b72-e015374d7720",
                        "dwellings": null,
                        "entrances": null,
                        "is_current": true,
                        "replaced_by_building_id": null
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidParameter"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          }
        }
      }
    },
    "/buildings/{building_id}/registered-businesses": {
      "get": {
        "tags": [
          "Registered businesses"
        ],
        "operationId": "listBuildingRegisteredBusinesses",
        "summary": "Businesses registered at a building's address",
        "description": "The active businesses whose registered office is the building's exact official address, largest first, at most 25; `meta.total` counts them all. A registered office is never ownership or occupancy.",
        "parameters": [
          {
            "name": "building_id",
            "in": "path",
            "required": true,
            "description": "The building's baseray id, a UUID returned by the other building endpoints.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "c9eefd1b-8c8d-48fe-8b72-e015374d7720"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "X-Daily-Quota-Limit": {
                "$ref": "#/components/headers/X-Daily-Quota-Limit"
              },
              "X-Daily-Quota-Remaining": {
                "$ref": "#/components/headers/X-Daily-Quota-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisteredBusinessList"
                },
                "examples": {
                  "example": {
                    "summary": "Illustrative placeholder, not a real business.",
                    "value": {
                      "data": [
                        {
                          "name": "Example Business SRL",
                          "registration_number": "00000000",
                          "country": "RO",
                          "employees": "10–49",
                          "employees_stated_for": "FY 2024"
                        }
                      ],
                      "meta": {
                        "total": 1
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidParameter"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "tags": [
          "Meta"
        ],
        "operationId": "getOpenApiDocument",
        "summary": "This document",
        "security": [],
        "description": "The OpenAPI 3.1 document of this API. Public and cacheable (`Cache-Control: public, max-age=3600`, `ETag`).",
        "responses": {
          "200": {
            "description": "The OpenAPI document.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "304": {
            "description": "Not modified since the `ETag` given in `If-None-Match`."
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "br_live_…",
        "description": "A workspace API key, created in the baseray app under Settings → API keys. Send it as `Authorization: Bearer br_live_…`."
      }
    },
    "headers": {
      "RateLimit-Limit": {
        "description": "Requests this key may make per minute.",
        "schema": {
          "type": "integer"
        },
        "example": 60
      },
      "RateLimit-Remaining": {
        "description": "Requests this key has left in the current minute.",
        "schema": {
          "type": "integer"
        },
        "example": 59
      },
      "RateLimit-Reset": {
        "description": "Seconds until the current minute window resets.",
        "schema": {
          "type": "integer"
        },
        "example": 60
      },
      "X-Daily-Quota-Limit": {
        "description": "Requests the workspace's keys may make per UTC day.",
        "schema": {
          "type": "integer"
        },
        "example": 5000
      },
      "X-Daily-Quota-Remaining": {
        "description": "Requests the workspace has left today (UTC).",
        "schema": {
          "type": "integer"
        },
        "example": 4868
      },
      "Retry-After": {
        "description": "Seconds to wait before retrying.",
        "schema": {
          "type": "integer"
        },
        "example": 30
      }
    },
    "responses": {
      "InvalidParameter": {
        "description": "A parameter is missing, malformed or out of range (`invalid_parameter`).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "bbox": {
                "value": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "bbox must be minLon,minLat,maxLon,maxLat.",
                    "parameter": "bbox"
                  }
                }
              }
            }
          }
        }
      },
      "Unauthenticated": {
        "description": "No API key, or one that does not work: `missing_api_key`, `invalid_api_key`, `revoked_api_key` or `expired_api_key`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "missing": {
                "value": {
                  "error": {
                    "code": "missing_api_key",
                    "message": "Send a workspace API key in the Authorization header: Bearer br_live_…."
                  }
                }
              },
              "revoked": {
                "value": {
                  "error": {
                    "code": "revoked_api_key",
                    "message": "This API key was revoked. Create a new one under Settings → API keys."
                  }
                }
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "The key may not do this: `insufficient_scope`, or `workspace_access_revoked` when the key's creator no longer belongs to its workspace.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "workspace": {
                "value": {
                  "error": {
                    "code": "workspace_access_revoked",
                    "message": "The person who created this API key no longer belongs to its workspace."
                  }
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "No building has this id (`not_found`).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "building": {
                "value": {
                  "error": {
                    "code": "not_found",
                    "message": "No building has this id."
                  }
                }
              }
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "`rate_limited` (the key's per-minute limit) or `quota_exceeded` (the workspace's daily quota).",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimit-Limit"
          },
          "RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimit-Remaining"
          },
          "RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimit-Reset"
          },
          "X-Daily-Quota-Limit": {
            "$ref": "#/components/headers/X-Daily-Quota-Limit"
          },
          "X-Daily-Quota-Remaining": {
            "$ref": "#/components/headers/X-Daily-Quota-Remaining"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "rate": {
                "value": {
                  "error": {
                    "code": "rate_limited",
                    "message": "This API key made more than 60 requests in a minute; retry after 12 seconds."
                  }
                }
              },
              "quota": {
                "value": {
                  "error": {
                    "code": "quota_exceeded",
                    "message": "This workspace has used its daily quota of 5000 requests; it resets at 00:00 UTC."
                  }
                }
              }
            }
          }
        }
      },
      "UpstreamUnavailable": {
        "description": "The building catalogue is unavailable right now (`upstream_unavailable`); retry after `Retry-After` seconds.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "upstream": {
                "value": {
                  "error": {
                    "code": "upstream_unavailable",
                    "message": "The building catalogue is unavailable right now. Retry shortly."
                  }
                }
              }
            }
          }
        }
      }
    },
    "schemas": {
      "Height": {
        "type": "object",
        "required": [
          "metres",
          "basis"
        ],
        "additionalProperties": false,
        "properties": {
          "metres": {
            "type": "number",
            "description": "Height in metres.",
            "example": 18
          },
          "basis": {
            "type": "string",
            "enum": [
              "measured",
              "estimated"
            ],
            "description": "`measured`, or `estimated` (modelled)."
          }
        }
      },
      "ExistingSolarPanels": {
        "type": "object",
        "required": [
          "status",
          "photo_date",
          "confidence"
        ],
        "additionalProperties": false,
        "description": "Whether solar panels are already on the roof, as a dated photo of the roof shows it.",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "detected",
              "none_seen",
              "unclear",
              "not_checked"
            ],
            "description": "`detected`, `none_seen`, `unclear`, or `not_checked` (never checked, or the photo was too coarse to check)."
          },
          "photo_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of the photo checked; null when undated or never checked."
          },
          "confidence": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 1,
            "description": "The check's confidence in its result, 0 to 1; null when not checked."
          }
        },
        "example": {
          "status": "none_seen",
          "photo_date": "2022-09-08",
          "confidence": 0.988
        }
      },
      "SolarPotential": {
        "type": "object",
        "required": [
          "max_panel_count",
          "max_capacity_kwp",
          "yearly_energy_kwh",
          "usable_roof_area_m2",
          "co2_savings_kg_per_year"
        ],
        "additionalProperties": false,
        "description": "Rooftop solar potential, present only where the roof has been modelled.",
        "properties": {
          "max_panel_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Solar panels that fit on the roof."
          },
          "max_capacity_kwp": {
            "type": [
              "number",
              "null"
            ],
            "description": "Capacity of those panels, in kWp."
          },
          "yearly_energy_kwh": {
            "type": [
              "number",
              "null"
            ],
            "description": "Energy they would produce in a year, in kWh."
          },
          "usable_roof_area_m2": {
            "type": [
              "number",
              "null"
            ],
            "description": "Roof area usable for panels, in m²."
          },
          "co2_savings_kg_per_year": {
            "type": [
              "number",
              "null"
            ],
            "description": "CO₂ the installation would save, in kg a year."
          }
        },
        "example": {
          "max_panel_count": 315,
          "max_capacity_kwp": 126,
          "yearly_energy_kwh": 158019.9,
          "usable_roof_area_m2": 618.5,
          "co2_savings_kg_per_year": 36976.7
        }
      },
      "BuildingSummary": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "building_id",
          "address",
          "locality",
          "country",
          "latitude",
          "longitude",
          "category",
          "footprint_area_m2",
          "height",
          "volume_m3",
          "volume_basis",
          "floors",
          "existing_solar_panels",
          "solar_potential",
          "registered_business_count",
          "app_url"
        ],
        "properties": {
          "building_id": {
            "type": "string",
            "format": "uuid",
            "description": "The building's baseray id."
          },
          "address": {
            "type": [
              "string",
              "null"
            ],
            "description": "Street and house number as recorded; null when the building has no address on record."
          },
          "locality": {
            "type": [
              "string",
              "null"
            ],
            "description": "Town, city or village."
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{2}$",
            "description": "ISO 3166-1 alpha-2 country code."
          },
          "latitude": {
            "type": "number",
            "description": "Latitude of the building's centre, WGS84."
          },
          "longitude": {
            "type": "number",
            "description": "Longitude of the building's centre, WGS84."
          },
          "category": {
            "type": "string",
            "enum": [
              "residential_house",
              "apartment_block",
              "commercial",
              "industrial",
              "public",
              "agricultural",
              "ancillary",
              "unknown"
            ],
            "description": "Building category; `ancillary` is an annex or outbuilding."
          },
          "footprint_area_m2": {
            "type": "number",
            "description": "Ground footprint, in m²."
          },
          "height": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Height"
              },
              {
                "type": "null"
              }
            ],
            "description": "Height; null when unknown."
          },
          "volume_m3": {
            "type": [
              "number",
              "null"
            ],
            "description": "Volume, in m³; null when unknown."
          },
          "volume_basis": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "measured",
              "estimated",
              null
            ],
            "description": "Whether the volume is measured or estimated; null with the volume."
          },
          "floors": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Floors above ground; null when unknown."
          },
          "existing_solar_panels": {
            "$ref": "#/components/schemas/ExistingSolarPanels"
          },
          "solar_potential": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SolarPotential"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rooftop solar potential; null where the roof has not been modelled."
          },
          "registered_business_count": {
            "type": "integer",
            "minimum": 0,
            "description": "Active businesses whose registered office is the building's address. Never ownership or occupancy."
          },
          "app_url": {
            "type": "string",
            "format": "uri",
            "description": "The building in the baseray app."
          }
        },
        "example": {
          "building_id": "c9eefd1b-8c8d-48fe-8b72-e015374d7720",
          "address": "Bulevardul 15 Noiembrie 78",
          "locality": "Brașov",
          "country": "RO",
          "latitude": 45.64988,
          "longitude": 25.61044,
          "category": "commercial",
          "footprint_area_m2": 31252,
          "height": {
            "metres": 18,
            "basis": "estimated"
          },
          "volume_m3": 562531,
          "volume_basis": "estimated",
          "floors": 16,
          "existing_solar_panels": {
            "status": "none_seen",
            "photo_date": "2022-09-08",
            "confidence": 0.988
          },
          "solar_potential": null,
          "registered_business_count": 0,
          "app_url": "https://app.baseray.ai/?building=c9eefd1b-8c8d-48fe-8b72-e015374d7720"
        }
      },
      "BuildingDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/BuildingSummary"
          },
          {
            "type": "object",
            "required": [
              "dwellings",
              "entrances",
              "is_current",
              "replaced_by_building_id"
            ],
            "properties": {
              "dwellings": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Dwellings, where known; null when unknown."
              },
              "entrances": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Entrances: each listed address of the building counts as one; null when none are listed."
              },
              "is_current": {
                "type": "boolean",
                "description": "False once the building is no longer in the catalogue's current release."
              },
              "replaced_by_building_id": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uuid",
                "description": "The building now standing on a retired building's ground, when there is one."
              }
            }
          }
        ],
        "unevaluatedProperties": false,
        "example": {
          "building_id": "c9eefd1b-8c8d-48fe-8b72-e015374d7720",
          "address": "Bulevardul 15 Noiembrie 78",
          "locality": "Brașov",
          "country": "RO",
          "latitude": 45.64988,
          "longitude": 25.61044,
          "category": "commercial",
          "footprint_area_m2": 31252,
          "height": {
            "metres": 18,
            "basis": "estimated"
          },
          "volume_m3": 562531,
          "volume_basis": "estimated",
          "floors": 16,
          "existing_solar_panels": {
            "status": "none_seen",
            "photo_date": "2022-09-08",
            "confidence": 0.988
          },
          "solar_potential": null,
          "registered_business_count": 0,
          "app_url": "https://app.baseray.ai/?building=c9eefd1b-8c8d-48fe-8b72-e015374d7720",
          "dwellings": null,
          "entrances": null,
          "is_current": true,
          "replaced_by_building_id": null
        }
      },
      "RegisteredBusiness": {
        "type": "object",
        "required": [
          "name",
          "registration_number",
          "country",
          "employees",
          "employees_stated_for"
        ],
        "additionalProperties": false,
        "description": "Registered office at this address; never ownership or occupancy.",
        "properties": {
          "name": {
            "type": "string",
            "description": "The business's registered name."
          },
          "registration_number": {
            "type": "string",
            "description": "Its company registration number (a CUI in Romania, an IČO in Czechia)."
          },
          "country": {
            "type": "string",
            "pattern": "^[A-Z]{2}$",
            "description": "ISO 3166-1 alpha-2 country of the registration number."
          },
          "employees": {
            "type": [
              "string",
              "null"
            ],
            "description": "Employees as stated: an exact count (`12`), a band (`10–49`) or an open top band (`1000 or more`); null when not stated.",
            "example": "10–49"
          },
          "employees_stated_for": {
            "type": [
              "string",
              "null"
            ],
            "description": "When the size was stated: a date, or a financial year such as `FY 2024`.",
            "example": "FY 2024"
          }
        }
      },
      "PaginationMeta": {
        "type": "object",
        "required": [
          "total",
          "total_is_capped",
          "limit",
          "offset",
          "sort"
        ],
        "additionalProperties": false,
        "properties": {
          "total": {
            "type": "integer",
            "minimum": 0,
            "description": "Buildings matching, counted up to 10,000."
          },
          "total_is_capped": {
            "type": "boolean",
            "description": "True when counting stopped at 10,000; narrow the box for an exact total."
          },
          "limit": {
            "type": "integer",
            "description": "The page size used."
          },
          "offset": {
            "type": "integer",
            "description": "The offset used."
          },
          "sort": {
            "type": "string",
            "enum": [
              "volume",
              "area",
              "height",
              "registered_business_turnover",
              "registered_business_employees"
            ],
            "description": "The ranking used."
          }
        }
      },
      "Links": {
        "type": "object",
        "required": [
          "next"
        ],
        "additionalProperties": false,
        "properties": {
          "next": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "The next page's URL; null on the last page."
          }
        }
      },
      "BuildingPage": {
        "type": "object",
        "required": [
          "data",
          "meta",
          "links"
        ],
        "additionalProperties": false,
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BuildingSummary"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/PaginationMeta"
          },
          "links": {
            "$ref": "#/components/schemas/Links"
          }
        }
      },
      "BuildingList": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BuildingSummary"
            },
            "description": "Nearest first."
          }
        }
      },
      "BuildingDetailEnvelope": {
        "type": "object",
        "required": [
          "data"
        ],
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/BuildingDetail"
          }
        }
      },
      "RegisteredBusinessList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "additionalProperties": false,
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegisteredBusiness"
            },
            "maxItems": 25
          },
          "meta": {
            "type": "object",
            "required": [
              "total"
            ],
            "additionalProperties": false,
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "description": "Every business registered at the address; can exceed the businesses listed."
              }
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "additionalProperties": false,
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "additionalProperties": false,
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "invalid_parameter",
                  "missing_api_key",
                  "invalid_api_key",
                  "revoked_api_key",
                  "expired_api_key",
                  "insufficient_scope",
                  "workspace_access_revoked",
                  "not_found",
                  "rate_limited",
                  "quota_exceeded",
                  "upstream_unavailable"
                ],
                "description": "Stable machine-readable reason."
              },
              "message": {
                "type": "string",
                "description": "What went wrong, for people."
              },
              "parameter": {
                "type": "string",
                "description": "The parameter at fault, for `invalid_parameter`."
              }
            }
          }
        },
        "example": {
          "error": {
            "code": "invalid_parameter",
            "message": "bbox must be minLon,minLat,maxLon,maxLat.",
            "parameter": "bbox"
          }
        }
      }
    }
  }
}