# Buildings

A **building** is an individual structure within a [site](https://docs.butlr.io/asset-management/graphql-api-overview/sites), comprising one or more floors. A site can have one or multiple buildings.

This page provides guidance on how to [**retrieve**](#get-all-buildings), [**create**](#create-building-s), and [**update building information**](#update-building-s), enabling streamlined management of building data and ensuring operational efficiency.

{% hint style="success" %}
First, obtain an access token to get started [here](https://docs.butlr.io/getting-started/authentication).
{% endhint %}

***

### Get all buildings

```graphql
query allBuildings {
  buildings {
    data {
      id
      name
      capacity {
        max
        mid
      }
      floors {
        id
        name
        ...FloorFragment
      }
      buildingNumber
      address {
        lines
      }
      customID
      site {
        id
        name
        ...SiteFragment
      }
    }
  }
}
```

#### Code Examples

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location 'https://api.butlr.io/api/v3/graphql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer [insert access_token here]' \
--data '{"query":"query allBuildings {\n  buildings {\n    data {\n      id\n      name\n      capacity {\n        max\n        mid\n      }\n      floors {\n        id\n        name\n      }\n      buildingNumber\n      address {\n        lines\n      }\n      customID\n      site {\n        id\n        name\n      }\n    }\n  }\n}","variables":{}}'
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api.butlr.io/api/v3/graphql"
  method := "POST"

  payload := strings.NewReader("{\"query\":\"query allBuildings {\\n  buildings {\\n    data {\\n      id\\n      name\\n      capacity {\\n        max\\n        mid\\n      }\\n      floors {\\n        id\\n        name\\n      }\\n      buildingNumber\\n      address {\\n        lines\\n      }\\n      customID\\n      site {\\n        id\\n        name\\n      }\\n    }\\n  }\\n}\",\"variables\":{}}")

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer [insert access_token here]")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://api.butlr.io/api/v3/graphql"

payload = "{\"query\":\"query allBuildings {\\n  buildings {\\n    data {\\n      id\\n      name\\n      capacity {\\n        max\\n        mid\\n      }\\n      floors {\\n        id\\n        name\\n      }\\n      buildingNumber\\n      address {\\n        lines\\n      }\\n      customID\\n      site {\\n        id\\n        name\\n      }\\n    }\\n  }\\n}\",\"variables\":{}}"
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer [insert access_token here]'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)


```

{% endtab %}
{% endtabs %}

***

### Update building(s)

```graphql
mutation updateBuildingInfo($input: UpdateBuildingInfoInput!) {
  updateBuildingInfo(input: $input) {
    building {
      id
      name
      capacity {
        max
        mid
      }
      floors {
        id
        name
      }
      buildingNumber
      address {
        lines
      }
      customID
      site {
        id
        name
      }
    }
  }
}

# Variables
{
    "input" : {
        "name": "example_building_updated_name",
        "id" : "building_2mAArGz8LmitbjThTYHYoRVciLY"
    }
}
```

#### Code Examples

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location 'https://api.butlr.io/api/v3/graphql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer [insert access_token here]' \
--data '{"query":"mutation updateBuildingInfo($input: UpdateBuildingInfoInput!) {\n  updateBuildingInfo(input: $input) {\n    building {\n      id\n      name\n      capacity {\n        max\n        mid\n      }\n      floors {\n        id\n        name\n      }\n      buildingNumber\n      address {\n        lines\n      }\n      customID\n      site {\n        id\n        name\n      }\n    }\n  }\n}","variables":{"input":{"name":"example_building_updated_name","id":"building_2mAArGz8LmitbjThTYHYoRVciLY"}}}'
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api.butlr.io/api/v3/graphql"
  method := "POST"

  payload := strings.NewReader("{\"query\":\"mutation updateBuildingInfo($input: UpdateBuildingInfoInput!) {\\n  updateBuildingInfo(input: $input) {\\n    building {\\n      id\\n      name\\n      capacity {\\n        max\\n        mid\\n      }\\n      floors {\\n        id\\n        name\\n      }\\n      buildingNumber\\n      address {\\n        lines\\n      }\\n      customID\\n      site {\\n        id\\n        name\\n      }\\n    }\\n  }\\n}\",\"variables\":{\"input\":{\"name\":\"example_building_updated_name\",\"id\":\"building_2mAArGz8LmitbjThTYHYoRVciLY\"}}}")

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer [insert access_token here]")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://api.butlr.io/api/v3/graphql"

payload = "{\"query\":\"mutation updateBuildingInfo($input: UpdateBuildingInfoInput!) {\\n  updateBuildingInfo(input: $input) {\\n    building {\\n      id\\n      name\\n      capacity {\\n        max\\n        mid\\n      }\\n      floors {\\n        id\\n        name\\n      }\\n      buildingNumber\\n      address {\\n        lines\\n      }\\n      customID\\n      site {\\n        id\\n        name\\n      }\\n    }\\n  }\\n}\",\"variables\":{\"input\":{\"name\":\"example_building_updated_name\",\"id\":\"building_2mAArGz8LmitbjThTYHYoRVciLY\"}}}"
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer [insert access_token here]'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}
{% endtabs %}
