API Home

API Access & Authentication

With the exception of public API endpoints, requests to the WegoWise API must be authenticated. WegoWise authenticates these requests using the OAuth 1.0 protocol. OAuth client libraries are available for numerous programming languages.

Step 1: Register App

To make authenticated requests to the WegoWise API, you must first register your app with WegoWise. You must have an active WegoWise user account to register an app. Registered apps are given authentication credentials consisting of a consumer key and a consumer secret, which will be used in subsequent steps when generating OAuth headers.

Consumer Credentials

Step 2: Request Temporary Credentials

Your app will need to send a POST request to https://www.wegowise.com/oauth/request_token which includes the appropriate OAuth authorization header . An example header is shown below.


Authorization:
OAuth oauth_consumer_key="17547cfc0b45bf1f7ca17eee86318af35103b4ce",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1395088838",
oauth_nonce="867c4716a81e236c4671e3f82098b6f8",
oauth_version="1.0",
oauth_callback="http%3A%2F%2Fexample.com%2Fcallback",
oauth_signature="Mc%2B2WEdHD5AsbDP5NsgVRYVwKXo%3D"

WegoWise will return a url-encoded response with the temporary token credentials in the response body

oauth_token=a5f5e9d2a3911a048b467bce3ad577a5cb64402c&oauth_token_secret=cfe39d9b5fb6b8617e5c633da1ec23c9f993c676&oauth_callback_confirmed=true

Step 3: Obtain User Authorization

Access token credentials are specific to the WegoWise user who is using your app. After successfully obtaining temporary credentials, your app should direct users to WegoWise so they can grant permission for your app to access their resources. Given the above temporary credential response, you would send the user to https://www.wegowise.com/oauth/authorize?oauth_token=a5f5e9d2a3911a048b467bce3ad577a5cb64402c , where they will be prompted to authorize your app. Ensure that you attach the oauth_token parameter to the URL as shown above as well as the authorization header.

Authorize app

After the user authorizes the app, WegoWise will redirect the user to the callback URL you established when the app was registered with WegoWise. An oauth_verifier string will have been appended to the URL. Your app will include that verifier in the next step.

Step 4: Request Access Token Credentials

The final step involves sending a POST request to https://www.wegowise.com/oauth/access_token. This request will include the appropriate OAuth authorization header for an OAuth token credential request. An example header is shown below.


Authorization:
OAuth oauth_consumer_key="17547cfc0b45bf1f7ca17eee86318af35103b4ce",
oauth_token="a5f5e9d2a3911a048b467bce3ad577a5cb64402c",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1395087547",
oauth_nonce="b4c399fb4d05bd186895e0ee1c886271",
oauth_verifier="d830f350d1d0099e6fc6",
oauth_version="1.0",
oauth_signature="NrHElhluZZSRjXOPC6uaRHZvkVM%3D"

WegoWise will return a url-encoded response with the token credentials in the response body.

oauth_token=d01533fc7c157566aa53cb3b8f80bbfa85bec356&oauth_token_secret=e6592fe3c77653a5d6d1112c51d2edac0b694340

Once you have the access token credentials you will be able to request protected resources using the access token credentials for the user who granted access. You will need to repeat steps 2 through 4 for each WegoWise user your app needs to access resources for.

Examples

Node.js Example


var oauth = require('oauth-client');

var consumer = oauth.createConsumer('CONSUMER_KEY', 'CONSUMER_SECRET');
var token = oauth.createToken('ACCESS_TOKEN_KEY', 'ACCESS_TOKEN_SECRET');
var signature = oauth.createHmac(consumer, token);

var request_options = {
    port: '443',
    host: 'www.wegowise.com',
    https: true,
    path: '/api/v1/users/USERNAME/buildings/ID?sqft=194000&has_elevator=false',
    oauth_signature: signature,
    method: 'PUT',
    headers: { 'content-type': 'application/json' }
}

var request = oauth.request(request_options, function(response) {
    response.setEncoding('utf8');
    response.on('data', function (chunk) {
        console.log(chunk);
    });
});

request.end();

OAuth

View OAuth user

GET
/oauth/user

Get information about the user whose access token credentials are being used to request authenticated resources.

200 response

{
  "id": "1",
  "username": "johndoe"
}

Apartments

List apartments

GET
/api/v1/wego_pro/buildings/{id}/apartments

Get a list of apartments that have been defined for a building.

200 response

[
  {
    "unit_number": "2C",
    "id": 102,
    "sqft": 13000,
    "n_bedrooms": 2,
    "building_id": 193
  },

  {
    "unit_number": "3C",
    "id": 103,
    "sqft": 13000,
    "n_bedrooms": 2,
    "building_id": 193
  }
]

404 response

{
  "errors": "Building not found"
}

View apartment

GET
/api/v1/wego_pro/apartments/{id}

Get info about a given apartment.

200 response

{
  "unit_number": "3C",
  "id": 103,
  "sqft": 13000,
  "n_bedrooms": 2,
  "building_id": 193
}

404 response

{
  "errors": "Apartment not found"
}

Create apartment

POST
/api/v1/wego_pro/buildings/{id}/apartments

Create an apartment associated with a building for the authorized user.

Request body

{
  "unit_number": "101a",
  "sqft": 1000,
  "n_bedrooms": 3
}

Schema

{
  "type": "object",
  "required": true,
  "properties": {
    "n_bedrooms": {
      "type": "integer",
      "required": true
    },
    "sqft": {
      "type": "integer",
      "required": true
    },
    "unit_number": {
      "type": "string",
      "required": true
    }
  }
}

200 response

{
  "id": 3534,
  "building_id": 1234,
  "unit_number": "101a",
  "sqft": 1000,
  "n_bedrooms": 3
}

400 response

{
  "errors": "Unit number can't be blank"
}

Update an apartment

PUT
/api/v1/wego_pro/apartments/{id}

Update an apartment.

Request body

{
  "unit_number": "29a"
}

200 response

{
  "id": 3534,
  "building_id": 1234,
  "unit_number": "29a",
  "sqft": 1000,
  "n_bedrooms": 3
}

400 response

{
  "errors": "Unit number can't be blank"
}

Destroy a apartment

DELETE
/api/v1/wego_pro/apartments/{id}

This will destroy an apartment that is editable by the authorized user. The server will respond with status code 204 with no body if the apartment is succesfully destroyed. If the apartment is not found the server will respond with a 404.

It is important to note that destroying an apartment cascades. Any associated meters and data will be destroyed as well.

Commercial Building Areas

List building areas

GET
/api/v1/wego_pro/buildings/{id}/areas

Get a list of the commercial building areas that have been defined for a given commercial building.

200 response

[
  {
    "id": 9,
    "building_id": 874,
    "name": "3rd Floor Office",
    "sqft": 1200,
    "type": "OfficeArea",
    "n_pcs": 16,
    "n_operating_hours": 50,
    "n_main_shift_workers": 16,
    "percent_heated": 100,
    "percent_cooled": 100,
    "is_vacant": false
  },

  {
    "id": 12,
    "building_id": 874,
    "name": "4th Floor Office",
    "sqft": 1000,
    "type": "OfficeArea",
    "n_pcs": 12,
    "n_operating_hours": 40,
    "n_main_shift_workers": 12,
    "percent_heated": 100,
    "is_vacant": false
  }
]

404 response

{
  "errors": "Building not found"
}

View building area

GET
/api/v1/wego_pro/areas/{id}

Get information about a given commercial building area.

200 response

{
  "building_id": 874,
  "name": "3rd Floor Office",
  "sqft": 1200,
  "type": "OfficeArea",
  "n_pcs": 16,
  "n_operating_hours": 50,
  "n_main_shift_workers": 16,
  "percent_heated": 100,
  "percent_cooled": 100,
  "is_vacant": false
 }

404 response

{
  "errors": "Area not found"
}

Create a commercial building area

POST
/api/v1/wego_pro/buildings/{id}/areas

Create a building area for a building that the authorized user has edit access to.

The schema that follows contains definitions of valid characteristics for each of the area types. Fields may have a minimum, maximum and default value. Any characteristic such as n_operating_hours must fall within the minimum/maximum range, but may be zero if is_vacant is true.

Request body

{
  "id": 192,
  "area_type": "BankArea",
  "name": "Piggy Bank",
  "n_operating_hours": 65,
  "sqft": 1000,
  "n_pcs": 3,
  "percent_heated": 90,
  "percent_cooled": 90,
  "is_vacant": false
}

Schema

[
  {
    "title": "BankArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.3
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.0
      }
    }
  },

  {
    "title": "CourthouseArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 60
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.3
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.0
      }
    }
  },

  {
    "title": "HospitalArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "n_fte_workers": {
        "description": "Number of full time workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.6
      },
      "n_staffed_beds": {
        "description": "Number of staffed beds per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0.46
      },
      "n_mri_machines": {
        "type": "integer",
        "required": false,
        "default": 1
      },
      "n_buildings": {
        "type": "integer",
        "required": false
      },
      "n_floors": {
        "type": "integer",
        "required": false
      },
      "has_tertiary_care": {
        "type": "boolean",
        "required": false
      },
      "has_laboratory": {
        "type": "boolean",
        "required": false
      },
      "has_laundry_facility": {
        "type": "boolean",
        "required": false
      },
      "ownership_status": {
        "enum":
          [
            "For Profit",
            "Government",
            "Non Profit"
          ],
        "required": false
      }
    }
  },

  {
    "title": "HotelArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 60
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 60
      },
      "n_rooms": {
        "description": "Number of rooms per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 1.95
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0.32
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.0
      },
      "n_commercial_refrigeration_units": {
        "type": "decimal",
        "required": false,
        "default": 0.023
      },
      "has_cooking": {
        "type": "boolean",
        "required": true,
        "default": false
      }
    }
  },

  {
    "title": "MedicalOfficeArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.2
      },
      "n_mri_machines": {
        "type": "integer",
        "required": false,
        "default": 1
      }
    }
  },

  {
    "title": "MultiFamilyHousingArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false
      },
      "percent_cooled": {
        "type": "integer",
        "required": false
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.3
      },
      "n_units": {
        "type": "integer",
        "required": false
      },
      "n_bedrooms": {
        "type": "integer",
        "required": false
      },
      "n_floors": {
        "type": "integer",
        "required": false
      },
      "n_laundry_hookups": {
        "type": "integer",
        "required": false
      },
      "n_common_area_laundry_hookups": {
        "type": "integer",
        "required": false
      },
      "resident_population_type": {
        "required": false,
        "enum":
          [
            "Dedicated Military",
            "Dedicated Senior/Independent Living",
            "Dedicated Special Accessibility Needs",
            "Dedicated Student",
            "Other dedicated housing",
            "No specific resident population"
          ]
      },
      "is_government_subsidized": {
        "type": "boolean",
        "required": false
      }
    }
  },

  {
    "title": "OfficeArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.3
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 2.0
      }
    }
  },

  {
    "title": "OtherArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "description": {
        "type": "string",
        "required": true
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0
      }
    }
  },

  {
    "title": "ParkingArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "n_enclosed_sqft": {
        "type": "integer",
        "required": true
      },
      "n_non_enclosed_sqft": {
        "type": "integer",
        "required": true
      },
      "n_open_sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "supplemental_heating": {
        "type": "string",
        "required": false
      }
    }
  },

  {
    "title": "ResidenceHallArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "has_computer_lab": {
        "type": "boolean",
        "default": false
      },
      "has_dining_hall": {
        "type": "boolean",
        "default": false
      },
      "n_rooms": {
        "type": "integer",
        "required": false
      }
    }
  },

  {
    "title": "RetailArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 1
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "default": 0.2
      },
      "n_cash_registers": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "default": 0.3
      },
      "n_walkin_freezers": {
        "type": "integer",
        "default": 0
      },
      "n_refrigerator_freezers": {
        "type": "integer",
        "default": 0
      },
      "has_outside_entrance": {
        "type": "boolean",
        "default": true
      }
    }
  },

  {
    "title": "SchoolArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 65,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0.77
      },
      "n_total_seating_capacity": {
        "description": "Number of seats per 1000 sqft",
        "type": "decimal",
        "default": 10.0
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "default": 1.75
      },
      "n_walkin_freezers": {
        "type": "decimal",
        "default": 0.01
      },
      "is_open_weekends": {
        "type": "boolean",
        "default": false
      },
      "is_high_school": {
        "type": "boolean",
        "default": false
      },
      "has_cooking": {
        "type": "boolean",
        "default": true
      }
    }
  },

  {
    "title": "SeniorCareArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "n_units": {
        "description": "Number of units per 1000 sqft",
        "type": "decimal",
        "default": 1.584
      },
      "n_average_residents": {
        "description": "Number of residents per 1000 sqft",
        "type": "decimal",
        "default": 2.075
      },
      "total_resident_capacity": {
        "description": "Number of residents per 1000 sqft",
        "type": "decimal",
        "default": 2.374
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0.9523
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "default": 1.75
      },
      "n_commercial_refrigeration_units": {
        "type": "integer",
        "required": false
      },
      "n_commercial_washing_machines": {
        "description": "Number of commercial washing machines per 1000 sqft",
        "type": "decimal",
        "default": 0.04422
      },
      "n_residential_washing_machines": {
        "description": "Number of residential washing machines per 1000 sqft",
        "type": "decimal",
        "default": 0.05757
      },
      "n_electronic_lift_systems": {
        "description": "Number of electronic lifts per 1000 sqft",
        "type": "decimal",
        "default": 0.0704
      }
    }
  },

  {
    "title": "SupermarketArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 100
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 105,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 1
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "required": false
      },
      "n_walkin_freezers": {
        "description": "Number of walkin freezers per 1000 sqft",
        "type": "decimal",
        "default": 0.25
      },
      "has_cooking": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "n_refrigerator_freezers": {
        "type": "integer",
        "required": false
      }
    }
  },

  {
    "title": "WarehouseRefrigeratedArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 60,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0.59
      }
    }
  },

  {
    "title": "WarehouseUnrefrigeratedArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "percent_heated": {
        "type": "integer",
        "required": false,
        "default": 20
      },
      "percent_cooled": {
        "type": "integer",
        "required": false,
        "default": 50
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 60,
        "minimum": 30,
        "maximum": 168
      },
      "n_main_shift_workers": {
        "description": "Number of main shift workers per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 0.59
      },
      "n_walkin_freezers": {
        "type": "integer",
        "default": 0
      }
    }
  },

  {
    "title": "WorshipFacilityArea",
    "type": "object",
    "required": true,
    "properties": {
      "name": {
        "type": "string",
        "required": true
      },
      "sqft": {
        "type": "integer",
        "required": true
      },
      "is_vacant": {
        "type": "boolean",
        "required": true,
        "default": false
      },
      "n_operating_hours": {
        "type": "integer",
        "required": false,
        "default": 33,
        "maximum": 168
      },
      "n_total_seating_capacity": {
        "description": "Total seating capacity per 1000 sqft",
        "type": "decimal",
        "required": false,
        "default": 40
      },
      "n_weekdays_open": {
        "type": "integer",
        "required": false,
        "default": 3,
        "minimum": 1,
        "maximum": 7
      },
      "n_pcs": {
        "description": "Number of computers per 1000 sqft",
        "type": "decimal",
        "default": 0.2
      },
      "n_commercial_refrigeration_units": {
        "description": "Number of commercial refrigerators per 1000 sqft",
        "type": "decimal",
        "default": 0.018
      }
    }
  }
]

200 response

{
  "building_id": 1,
  "name": "Piggy Bank",
  "sqft": 1000,
  "type": "BankArea",
  "n_operating_hours": 65,
  "n_main_shift_workers": 3,
  "n_pcs": 3,
  "percent_heated": 90.0,
  "percent_cooled": 90.0,
  "is_vacant": false
}

400 response

{
  "errors": "Name can't be blank"
}

Update a commercial building area

PUT
/api/v1/wego_pro/areas/{id}

Update a commercial building area that the authenticated user has access to. Validations will be performed as for the create area end point.

Request body

{
  "n_operating_hours": 50
}

200 response

{
  "id": 192,
  "area_type": "BankArea",
  "name": "Piggy Bank",
  "n_operating_hours": 50,
  "sqft": 1000,
  "n_pcs": 3,
  "percent_heated": 90,
  "percent_cooled": 90,
  "is_vacant": false
}

400 response

{
  "errors": "Name can't be blank"
}

Destroy a commercial building area

DELETE
/api/v1/wego_pro/areas/{id}

This will destroy a commercial building area that is editable by the authorized user. The server will respond with status code 204 with no body if the area is succesfully destroyed. If the area is not found the server will respond with a 404.

It is important to note that destroying an area cascades. Any associated meters and data will be destroyed as well.

Buildings

Buildings by user

GET
/api/v1/wego_pro/users/{username}/buildings

Get a list of buildings associated with a WegoWise user account.

200 response

[
  {
    "conditioned_sqft": 12000,
    "id": 1,
    "nickname": "The Big Building",
    "n_stories": 3,
    "sqft": 13000,
    "year_built": 1950,
    "type": "Low-rise / garden-style apartment building",
    "basement":
      {
        "sqft": 1000,
        "conditioned": false
      },
    "cooling":
      {
        "system": "none"
      },
    "heating":
      {
        "fuel": "Gas",
        "system": "hot_water_boiler"
      },
    "hot_water":
      {
        "fuel": "Gas",
        "system": "hot_water_boiler"
      },
    "location":
      {
        "city": "Boston",
        "climate_zone": "cold",
        "country": "United States",
        "county": "Suffolk",
        "state": "MA",
        "street_address": "1 Example Street",
        "zip_code": "02201"
      }
  },

  {
    "conditioned_sqft": 19000,
    "id": 2,
    "nickname": "Building A",
    "n_stories": 5,
    "sqft": 20050,
    "year_built": 1980,
    "type": "midrise",
    "basement":
      {
        "sqft": 1000,
        "conditioned": false
      },
    "cooling":
      {
        "system": "sleeve"
      },
    "heating":
      {
        "fuel": "Gas",
        "system": "furnace"
      },
    "hot_water":
      {
        "fuel": "Gas",
        "system": "furnace"
      },
    "location":
      {
        "city": "Boston",
        "climate_zone": "cold",
        "country": "United States",
        "county": "Suffolk",
        "state": "MA",
        "street_address": "7 Example Street",
        "zip_code": "02201"
      }
  }
]

404 response

{
  "errors": "User not found"
}

Buildings by development

GET
/api/v1/wego_pro/developments/{id}/buildings

Developments represent a collection of buildings, such as an apartment complex or a campus. This endpoint returns a list of buildings in the specified development.

200 response

[
  {
    "conditioned_sqft": 12000,
    "id": 1,
    "nickname": "The Big Building",
    "n_stories": 3,
    "sqft": 13000,
    "year_built": 1950,
    "type": "Low-rise / garden-style apartment building",
    "basement":
      {
        "sqft": 1000,
        "conditioned": false
      },
    "cooling":
      {
        "system": "none"
      },
    "heating":
      {
        "fuel": "Gas",
        "system": "hot_water_boiler"
      },
    "hot_water":
      {
        "fuel": "Gas",
        "system": "hot_water_boiler"
      },
    "location":
      {
        "city": "Boston",
        "climate_zone": "cold",
        "country": "United States",
        "county": "Suffolk",
        "state": "MA",
        "street_address": "1 Example Street",
        "zip_code": "02201"
      }
  },

  {
    "conditioned_sqft": 19000,
    "id": 2,
    "nickname": "Building A",
    "n_stories": 5,
    "sqft": 20050,
    "year_built": 1980,
    "type": "midrise",
    "basement":
      {
        "sqft": 1000,
        "conditioned": false
      },
    "cooling":
      {
        "system": "sleeve"
      },
    "heating":
      {
        "fuel": "Gas",
        "system": "furnace"
      },
    "hot_water":
      {
        "fuel": "Gas",
        "system": "furnace"
      },
    "location":
      {
        "city": "Boston",
        "climate_zone": "cold",
        "country": "United States",
        "county": "Suffolk",
        "state": "MA",
        "street_address": "7 Example Street",
        "zip_code": "02201"
      }
  }
]

404 response

{
  "errors": "Property not found"
}

Buildings for authorized user

GET
/api/v1/wego_pro/buildings

This endpoint returns a list of buildings for the authorized user.

200 response

[
  {
    "conditioned_sqft": 12000,
    "id": 1,
    "nickname": "The Big Building",
    "n_stories": 3,
    "sqft": 13000,
    "year_built": 1950,
    "type": "Low-rise / garden-style apartment building",
    "basement":
      {
        "sqft": 1000,
        "conditioned": false
      },
    "cooling":
      {
        "system": "none"
      },
    "heating":
      {
        "fuel": "Gas",
        "system": "hot_water_boiler"
      },
    "hot_water":
      {
        "fuel": "Gas",
        "system": "hot_water_boiler"
      },
    "location":
      {
        "city": "Boston",
        "climate_zone": "cold",
        "country": "United States",
        "county": "Suffolk",
        "state": "MA",
        "street_address": "1 Example Street",
        "zip_code": "02201"
      }
  },

  {
    "conditioned_sqft": 19000,
    "id": 2,
    "nickname": "Building A",
    "n_stories": 5,
    "sqft": 20050,
    "year_built": 1980,
    "type": "midrise",
    "basement":
      {
        "sqft": 1000,
        "conditioned": false
      },
    "cooling":
      {
        "system": "sleeve"
      },
    "heating":
      {
        "fuel": "Gas",
        "system": "furnace"
      },
    "hot_water":
      {
        "fuel": "Gas",
        "system": "furnace"
      },
    "location":
      {
        "city": "Boston",
        "climate_zone": "cold",
        "country": "United States",
        "county": "Suffolk",
        "state": "MA",
        "street_address": "7 Example Street",
        "zip_code": "02201"
      }
  }
]

View building

GET
/api/v1/wego_pro/buildings/{id}

Get info about a building.

200 response

{
  "conditioned_sqft": 12000,
  "id": 1,
  "nickname": "The Big Building",
  "n_stories": 3,
  "sqft": 13000,
  "year_built": 1950,
  "type": "Low-rise / garden-style apartment building",
  "basement":
    {
      "sqft": 1000,
      "conditioned": false
    },
  "cooling":
    {
      "system": "Window AC"
    },
  "heating":
    {
      "fuel": "Gas",
      "system": "Boiler (High-efficiency condensing)"
    },
  "hot_water":
    {
      "fuel": "Gas",
      "system": "Indirect hot water tank off boiler (Heat & DHW)"
    },
  "location":
    {
      "city": "Boston",
      "climate_zone": "cold",
      "country": "United States",
      "county": "Suffolk",
      "state": "MA",
      "street_address": "1 Example Street",
      "zip_code": "02201"
    }
}

404 response

{
  "errors": "Building not found"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Create building

POST
/api/v1/wego_pro/developments/{id}/buildings

Create a building for the authorized user.

Request body

{
  "address": "123 Main St, Boston, MA 02118",
  "nickname": "Main Street Apartments",
  "year_built": "2000",
  "construction": "wood_steel",
  "sqft": "1000",
  "has_basement": true,
  "basement_sqft": "200",
  "basement_conditioned": false,
  "n_stories": 2,
  "n_bedrooms": 12,
  "green_certified": false,
  "n_electric_general_meters": 1,
  "n_water_general_meters": 1,
  "n_gas_general_meters": 1,
  "n_oil_general_meters": 0,
  "heating_system": "furnace",
  "heating_fuel": "Gas",
  "cooling_system": "window_ac",
  "hot_water_fuel": "Solar",
  "hot_water_system": "other",
  "has_pool": false,
  "has_laundry": false,
  "notes": "notes",
  "draft": false,
  "low_income": false,
  "resident_type": "other",
  "building_type": "sf_detached"
}

Schema

{
  "type": "object",
  "required": true,
  "properties": {
    "address": {
      "type": "string",
      "required": true
    },
    "nickname": {
      "type": "string",
      "required": true
    },
    "building_type": {
      "enum": [
      "sf_detached",
      "sf_attached",
      "apt_condo",
      "mobile_home",
      "multifamily",
      "lowrise",
      "midrise",
      "highrise"
      ],
      "required": true
    },
    "year_built": {
      "type": "string",
      "required": true
    },
    "construction": {
      "enum": [
      "wood_steel",
      "concrete",
      "masonry",
      "modular",
      "sips",
      "other"
      ],
      "required": true
    },
    "sqft": {
      "type": "integer",
      "required": true
    },
    "has_basement": {
      "type": "boolean",
      "required": true
    },
    "basement_sqft": {
      "type": "integer",
      "required": true
    },
    "basement_conditioned": {
      "type": "boolean",
      "required": true
    },
    "n_stories": {
      "type": "integer",
      "required": true
    },
    "n_bedrooms": {
      "type": "integer",
      "required": true
    },
    "green_certified": {
      "type": "boolean",
      "required": true
    },
    "leed_certified": {
      "type": "boolean",
      "required": true
    },
    "epa_certified": {
      "type": "boolean",
      "required": true
    },
    "nahb_certified": {
      "type": "boolean",
      "required": true
    },
    "earthcraft_certified": {
      "type": "boolean",
      "required": true
    },
    "enterprise_green_certified": {
      "type": "boolean",
      "required": true
    },
    "greenpoint_certified": {
      "type": "boolean",
      "required": true
    },
    "passive_house_certified": {
      "type": "boolean",
      "required": true
    },
    "other_certified": {
      "type": "boolean",
      "required": true
    },
    "leed_level": {
      "enum": [
      "Platinum",
      "Gold",
      "Silver",
      "Certified"
      ],
      "required": false
    },
    "n_water_general_meters": {
      "type": "integer",
      "required": true
    },
    "n_electric_general_meters": {
      "type": "integer",
      "required": true
    },
    "n_gas_general_meters": {
      "type": "integer",
      "required": true
    },
    "n_oil_general_meters": {
      "type": "integer",
      "required": true
    },
    "heating_system": {
      "enum": [
      "furnace",
      "h_e_furnace",
      "steam_boiler",
      "hot_water_boiler",
      "h_e_boiler",
      "apt_heat_pumps",
      "ground_heat_pump",
      "air_heat_pump",
      "hot_water",
      "h_e_hot_water",
      "baseboard",
      "ptac",
      "other"
      ],
      "required": true
    },
    "heating_fuel": {
      "enum": [
      "Electric",
      "Gas",
      "Oil"
      ],
      "required": true
    },
    "cooling_system": {
      "enum": [
      "window_ac",
      "sleeve",
      "mini_split",
      "ptac",
      "central",
      "rooftop",
      "ground_heat_pump",
      "tower_heat_pump",
      "air_chiller",
      "water_chiller",
      "none",
      "other"
      ],
      "required": true
    },
    "hot_water_fuel": {
      "enum": [
      "Electric",
      "Gas",
      "Oil"
      ],
      "required": true
    },
    "hot_water_system": {
      "enum": [
      "indirect_with_heat",
      "indirect_boiler",
      "tankless_coil",
      "stand_alone",
      "on_demand",
      "cogen",
      "other"
      ],
      "required": true
    },
    "has_laundry": {
      "type": "boolean",
      "required": true
    },
    "dryer_fuel": {
      "enum": [
      "Electric",
      "Gas"
      ],
      "required": false
    },
    "has_pool": {
      "type": "boolean",
      "required": true
    },
    "pool_year_round": {
      "type": "boolean",
      "required": false
    },
    "pool_fuel": {
      "enum": [
      "none",
      "electric",
      "gas",
      "solar"
      ],
      "required": false
    },
    "has_elevator": {
      "type": "boolean",
      "required": "true"
    },
    "resident_type": {
      "enum": [
      "elderly",
      "student",
      "family",
      "other"
      ],
      "required": "true"
    },
    "notes": {
      "type": "string",
      "required": false
    }
  }
}

200 response

{
  "conditioned_sqft": 12000,
  "id": 1,
  "nickname": "The Big Building",
  "n_stories": 3,
  "sqft": 13000,
  "year_built": 1950,
  "type": "Low-rise / garden-style apartment building",
  "basement":
    {
      "sqft": 1000,
      "conditioned": false
    },
  "cooling":
    {
      "system": "Window AC"
    },
  "heating":
    {
      "fuel": "Gas",
      "system": "Boiler (High-efficiency condensing)"
    },
  "hot_water":
    {
      "fuel": "Gas",
      "system": "Indirect hot water tank off boiler (Heat & DHW)"
    },
  "location":
    {
      "city": "Boston",
      "climate_zone": "cold",
      "country": "United States",
      "county": "Suffolk",
      "state": "MA",
      "street_address": "1 Example Street",
      "zip_code": "02201"
    }
}

400 response

{
  "errors": "Sqft is invalid"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Update building

PUT
/api/v1/wego_pro/buildings/{id}

Update a building that can be edited by the authorized user.

Request body

{
  "nickname": "The Largest Building"
}

200 response

{
  "conditioned_sqft": 12000,
  "id": 1,
  "nickname": "The Largest Building",
  "n_stories": 3,
  "sqft": 13000,
  "year_built": 1950,
  "type": "Low-rise / garden-style apartment building",
  "basement":
    {
      "sqft": 1000,
      "conditioned": false
    },
  "cooling":
    {
      "system": "Window AC"
    },
  "heating":
    {
      "fuel": "Gas",
      "system": "Boiler (High-efficiency condensing)"
    },
  "hot_water":
    {
      "fuel": "Gas",
      "system": "Indirect hot water tank off boiler (Heat & DHW)"
    },
  "location":
    {
      "city": "Boston",
      "climate_zone": "cold",
      "country": "United States",
      "county": "Suffolk",
      "state": "MA",
      "street_address": "1 Example Street",
      "zip_code": "02201"
    }
}

400 response

{
  "errors": "Total size of apartments is invalid"
}

Destroy a building

DELETE
/api/v1/wego_pro/buildings/{id}

This will destroy a building owned by the authorized user. The server will respond with status code 204 with no body if the building is succesfully destroyed. If the building is not found the server will respond with a 404.

It is important to note that destroying a building cascades. Any associated apartments, meters and data will be destroyed as well.

Monthly Data

Monthly data for apartment

GET
/api/v1/wego_pro/apartments/{id}/data

WegoWise normalizes raw meter data to calendar months and tracks how that data applies to the parent structure of each meter. This endpoint allows you to retrieve that normalized monthly data for the specified apartment, according to data type and desired usage or cost unit of measure.

URI Parameters
id

ID of the structure whose data we are querying

data_type

Type of data requested

  • electric
  • gas
  • oil
  • water
unit

Unit of measure, or charge type

  • btu
  • ccf
  • demand_kw
  • ft3
  • gallons
  • kwh
  • therms
  • delivery_charge
  • demand_charge
  • fixed_charge
  • fuel_charge
  • total_charge
200 response

[
  {
    "date": "2011-11-01",
    "value": 22.0
  },

  {
    "date": "2011-12-01",
    "value": 25.0
  },

  {
    "date": "2012-01-01",
    "value": 24.0
  }
]

400 response

{
  "errors": "Invalid data type and unit combination"
}

404 response

{
  "errors": "Apartment not found"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Monthly data for building

GET
/api/v1/wego_pro/buildings/{id}/data

WegoWise normalizes raw meter data to calendar months and tracks how that data applies to the parent structure of each meter. This endpoint allows you to retrieve that normalized monthly data for the specified building, according to data type and desired usage or cost unit of measure.

URI Parameters
id

ID of the structure whose data we are querying

data_type

Type of data requested

  • electric
  • gas
  • oil
  • water
unit

Unit of measure, or charge type

  • btu
  • ccf
  • demand_kw
  • ft3
  • gallons
  • kwh
  • therms
  • delivery_charge
  • demand_charge
  • fixed_charge
  • fuel_charge
  • total_charge
200 response

[
  {
    "date": "2011-11-01",
    "value": 22.0
  },

  {
    "date": "2011-12-01",
    "value": 25.0
  },

  {
    "date": "2012-01-01",
    "value": 24.0
  }
]

400 response

{
  "errors": "Invalid data type and unit combination"
}

404 response

{
  "errors": "Building not found"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Monthly data for meter

GET
/api/v1/wego_pro/meters/{id}/data

WegoWise normalizes raw meter data to calendar months and tracks how that data applies to the parent structure of each meter. This endpoint allows you to retrieve that normalized monthly data for the specified meter, according to data type and desired usage or cost unit of measure.

URI Parameters
id

ID of the structure whose data we are querying

data_type

Type of data requested

  • electric
  • gas
  • oil
  • water
unit

Unit of measure, or charge type

  • btu
  • ccf
  • demand_kw
  • ft3
  • gallons
  • kwh
  • therms
  • delivery_charge
  • demand_charge
  • fixed_charge
  • fuel_charge
  • total_charge
200 response

[
  {
    "date": "2011-11-01",
    "value": 22.0
  },

  {
    "date": "2011-12-01",
    "value": 25.0
  },

  {
    "date": "2012-01-01",
    "value": 24.0
  }
]

400 response

{
  "errors": "Invalid data type and unit combination"
}

404 response

{
  "errors": "Meter not found"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Monthly data for development

GET
/api/v1/wego_pro/developments/{id}/data

WegoWise normalizes raw meter data to calendar months and tracks how that data applies to the parent structure of each meter. This endpoint allows you to retrieve that normalized monthly data for the specified development, according to data type and desired usage or cost unit of measure.

URI Parameters
id

ID of the structure whose data we are querying

data_type

Type of data requested

  • electric
  • gas
  • oil
  • water
unit

Unit of measure, or charge type

  • btu
  • ccf
  • demand_kw
  • ft3
  • gallons
  • kwh
  • therms
  • delivery_charge
  • demand_charge
  • fixed_charge
  • fuel_charge
  • total_charge
200 response

[
  {
    "date": "2011-11-01",
    "value": 22.0
  },

  {
    "date": "2011-12-01",
    "value": 25.0
  },

  {
    "date": "2012-01-01",
    "value": 24.0
  }
]

400 response

{
  "errors": "Invalid data type and unit combination"
}

404 response

{
  "errors": "Property not found"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Raw Data

Raw data for a meter

GET
/api/v1/wego_pro/meters/{id}/raw_data

Retrieve a collection of datapoints for a given meter. This will return all raw data for a given meter, including datapoints manually added by users, as well as those imported from the utility company website where applicable. Data returned includes start and end dates, usage and cost figures.

200 response

[
  {
    "id": 1000,
    "delivery_charge": null,
    "end_date": "2014-01-31",
    "fuel_charge": null,
    "total_charge": "10.0",
    "start_date": "2014-01-01",
    "gallons": null,
    "kwh": "0.292997363023733",
    "btu": 1000,
    "demand_charge": null,
    "demand_kw": null,
    "fixed_charge": null,
    "late_charge": null,
    "off_peak_charge": null,
    "off_peak_kwh": null,
    "peak_charge": null,
    "peak_kwh": null
  },

  {
    "id": 1001,
    "delivery_charge": null,
    "end_date": "2013-12-31",
    "fuel_charge": null,
    "total_charge": "10.0",
    "start_date": "2013-12-01",
    "gallons": null,
    "kwh": "0.292997363023733",
    "btu": 1000,
    "demand_charge": null,
    "demand_kw": null,
    "fixed_charge": null,
    "late_charge": null,
    "off_peak_charge": null,
    "off_peak_kwh": null,
    "peak_charge": null,
    "peak_kwh": null
  }
]

404 response

{
  "errors": "Meter not found"
}

Show a raw datum for a meter

GET
/api/v1/wego_pro/meters/{id}/raw_data/{id}

Show a single raw datum for a meter.

200 response

{
  "id": 1,
  "delivery_charge": "100.0",
  "end_date": "2012-03-04",
  "fuel_charge": null,
  "total_charge": "500.0",
  "start_date": "2012-02-01",
  "gallons": null,
  "kwh": "29.2997363023733",
  "btu": 100000,
  "demand_charge": null,
  "demand_kw": null,
  "fixed_charge": "80.0",
  "late_charge": null,
  "off_peak_charge": null,
  "off_peak_kwh": null,
  "peak_charge": null,
  "peak_kwh": null
}

Create a raw datum for a meter

POST
/api/v1/wego_pro/meters/{id}/raw_data

You create a raw datum by specifying a meter in the url and posting to the raw data end point as a user that is authorized to edit the meter.

Each type of meter (electric, gas, oil, propane, steam, and water) has its own raw datum type with common and specific fields. A request is listed for gas. Schemas for each of the different types of raw datum are listed below.

Request body

{
  "start_date": "2012-02-01",
  "end_date": "2012-03-04",
  "btu": "100000",
  "total_charge": "300.0",
  "delivery_charge": "100.0",
  "fixed_charge": "80.0"
}

Schema

[
  {
    "title": "Electric raw datum",
    "type": "object",
    "required": true,
    "properties": {
      "start_date": {
        "type": "string",
        "required": true
      },
      "end_date": {
        "type": "string",
        "required": true
      },
      "kwh": {
        "type": "string",
        "required": true
      },
      "total_charge": {
        "type": "string",
        "required": true
      },
      "delivery_charge": {
        "type": "string",
        "required": false
      },
      "fixed_charge": {
        "type": "string",
        "required": false
      },
      "fuel_charge": {
        "type": "string",
        "required": false
      },
      "demand_charge": {
        "type": "string",
        "required": false
      },
      "peak_charge": {
        "type": "string",
        "required": false
      },
      "late_charge": {
        "type": "string",
        "required": false
      },
      "off_peak_charge": {
        "type": "string",
        "required": false
      },
      "peak_kwh": {
        "type": "string",
        "required": false
      },
      "off_peak_kwh": {
        "type": "string",
        "required": false
      },
      "demand_kw": {
        "type": "string",
        "required": false
      }
    }
  },

  {
    "title": "Gas raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "btu": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Oil raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "btu": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        },
        "gallons": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Steam raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "btu": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        },
        "gallons": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Water raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        },
        "gallons": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Propane raw datum",
    "type": "object",
    "required": true,
    "properties": {
      "start_date": {
        "type": "string",
        "required": true
      },
      "end_date": {
        "type": "string",
        "required": true
      },
      "btu": {
        "type": "string",
        "required": true
      },
      "total_charge": {
        "type": "string",
        "required": true
      },
      "delivery_charge": {
        "type": "string",
        "required": false
      },
      "fixed_charge": {
        "type": "string",
        "required": false
      },
      "fuel_charge": {
        "type": "string",
        "required": false
      },
      "gallons": {
        "type": "string",
        "required": false
      }
    }
  }
]

200 response

{
  "id": 1,
  "delivery_charge": "100.0",
  "end_date": "2012-03-04",
  "fuel_charge": null,
  "total_charge": "500.0",
  "start_date": "2012-02-01",
  "gallons": null,
  "kwh": "29.2997363023733",
  "btu": 100000,
  "demand_charge": null,
  "demand_kw": null,
  "fixed_charge": "80.0",
  "late_charge": null,
  "off_peak_charge": null,
  "off_peak_kwh": null,
  "peak_charge": null,
  "peak_kwh": null
}

400 response

{
  "errors": "Must specify usage or total cost"
}

Update a raw datum for a meter

PUT
/api/v1/wego_pro/meters/{id}/raw_data/{id}

In order to update a raw datum it is necessary to specify both the meter id and raw datum id in the PUT request url. The schema is the same for creating and updating a raw datum. Manually entered raw data may be updated by the automatic importer if a utility login has been created for a meter.

Request body

{
  "start_date": "2012-02-01",
  "end_date": "2012-03-04",
  "btu": "100000",
  "total_charge": "300.0",
  "delivery_charge": "100.0",
  "fixed_charge": "80.0"
}

Schema

[
  {
    "title": "Electric raw datum",
    "type": "object",
    "required": true,
    "properties": {
      "start_date": {
        "type": "string",
        "required": true
      },
      "end_date": {
        "type": "string",
        "required": true
      },
      "kwh": {
        "type": "string",
        "required": true
      },
      "total_charge": {
        "type": "string",
        "required": true
      },
      "delivery_charge": {
        "type": "string",
        "required": false
      },
      "fixed_charge": {
        "type": "string",
        "required": false
      },
      "fuel_charge": {
        "type": "string",
        "required": false
      },
      "demand_charge": {
        "type": "string",
        "required": false
      },
      "peak_charge": {
        "type": "string",
        "required": false
      },
      "late_charge": {
        "type": "string",
        "required": false
      },
      "off_peak_charge": {
        "type": "string",
        "required": false
      },
      "peak_kwh": {
        "type": "string",
        "required": false
      },
      "off_peak_kwh": {
        "type": "string",
        "required": false
      },
      "demand_kw": {
        "type": "string",
        "required": false
      }
    }
  },

  {
    "title": "Gas raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "btu": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Oil raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "btu": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        },
        "gallons": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Steam raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "btu": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        },
        "gallons": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Water raw datum",
    "type": "object",
    "required": true,
    "properties": {
        "start_date": {
            "type": "string",
            "required": true
        },
        "end_date": {
            "type": "string",
            "required": true
        },
        "total_charge": {
            "type": "string",
            "required": true
        },
        "delivery_charge": {
            "type": "string",
            "required": false
        },
        "fixed_charge": {
            "type": "string",
            "required": false
        },
        "fuel_charge": {
            "type": "string",
            "required": false
        },
        "gallons": {
            "type": "string",
            "required": false
        }
    }
  },

  {
    "title": "Propane raw datum",
    "type": "object",
    "required": true,
    "properties": {
      "start_date": {
        "type": "string",
        "required": true
      },
      "end_date": {
        "type": "string",
        "required": true
      },
      "btu": {
        "type": "string",
        "required": true
      },
      "total_charge": {
        "type": "string",
        "required": true
      },
      "delivery_charge": {
        "type": "string",
        "required": false
      },
      "fixed_charge": {
        "type": "string",
        "required": false
      },
      "fuel_charge": {
        "type": "string",
        "required": false
      },
      "gallons": {
        "type": "string",
        "required": false
      }
    }
  }
]

200 response

{
  "id": 1,
  "delivery_charge": "100.0",
  "end_date": "2012-03-04",
  "fuel_charge": null,
  "total_charge": "500.0",
  "start_date": "2012-02-01",
  "gallons": null,
  "kwh": "29.2997363023733",
  "btu": 100000,
  "demand_charge": null,
  "demand_kw": null,
  "fixed_charge": "80.0",
  "late_charge": null,
  "off_peak_charge": null,
  "off_peak_kwh": null,
  "peak_charge": null,
  "peak_kwh": null
}

400 response

{
  "errors": "Must specify usage or total cost"
}

Destroy a raw datum

DELETE
/api/v1/wego_pro/meters/{id}/raw_data/{id}

This will destroy a raw datum for a meter that the authorized user has edit access to. The server will respond with status code 204 with no body if the datum is succesfully destroyed. If the datum is not found the server will respond with a 404.

Developments

List developments

GET
/api/v1/wego_pro/users/{username}/developments

Get a list of developments associated with the specified WegoWise user account.

200 response

[
  {
    "buildings_count": 112,
    "covered_parking_sqft": null,
    "electric_meters_count": 9,
    "draft_buildings_count": 4,
    "gas_meters_count": 10,
    "id": 1,
    "irrigated_sqft": 99999,
    "name": "Shady Acres",
    "n_apartments": 42,
    "n_bedrooms": 89,
    "oil_meters_count": 11,
    "partially_covered_parking_sqft": null,
    "propane_meters_count": 13,
    "sqft": 91234,
    "steam_meters_count": 12,
    "uncovered_parking_sqft": null,
    "water_meters_count": 8
  },

  {
    "buildings_count": 412,
    "covered_parking_sqft": null,
    "electric_meters_count": 91,
    "draft_buildings_count": 44,
    "gas_meters_count": 100,
    "id": 2,
    "irrigated_sqft": null,
    "name": "Tuscan Meadows",
    "n_apartments": 43,
    "n_bedrooms": 99,
    "oil_meters_count": 110,
    "partially_covered_parking_sqft": null,
    "propane_meters_count": 130,
    "sqft": 310001,
    "steam_meters_count": 120,
    "uncovered_parking_sqft": null,
    "water_meters_count": 81
  }
]

404 response

{
  "errors": "User not found"
}

List developments

GET
/api/v1/wego_pro/users/developments

Get a list of developments associated with the authenticated user's account.

200 response

[
  {
    "buildings_count": 112,
    "covered_parking_sqft": null,
    "electric_meters_count": 9,
    "draft_buildings_count": 4,
    "gas_meters_count": 10,
    "id": 1,
    "irrigated_sqft": 99999,
    "name": "Shady Acres",
    "n_apartments": 42,
    "n_bedrooms": 89,
    "oil_meters_count": 11,
    "partially_covered_parking_sqft": null,
    "propane_meters_count": 13,
    "sqft": 91234,
    "steam_meters_count": 12,
    "uncovered_parking_sqft": null,
    "water_meters_count": 8
  },

  {
    "buildings_count": 412,
    "covered_parking_sqft": null,
    "electric_meters_count": 91,
    "draft_buildings_count": 44,
    "gas_meters_count": 100,
    "id": 2,
    "irrigated_sqft": null,
    "name": "Tuscan Meadows",
    "n_apartments": 43,
    "n_bedrooms": 99,
    "oil_meters_count": 110,
    "partially_covered_parking_sqft": null,
    "propane_meters_count": 130,
    "sqft": 310001,
    "steam_meters_count": 120,
    "uncovered_parking_sqft": null,
    "water_meters_count": 81
  }
]

Create development

POST
/api/v1/wego_pro/developments

Create a development

Developers may wish to use the JSON Schema Lint website to validate requests against the schema defined below.

Request body

{
  "name": "My Development",
  "manager": "John Smith",
  "legal_owner": "Jane Doe",
  "irrigated_sqft": 5000
}

Schema

{
  "type": "object",
  "required": true,
  "properties": {
    "name": {
      "type": "string",
      "required": true
    },
    "manager": {
      "type": "string",
      "required": true
    },
    "legal_owner": {
      "type": "string",
      "required": true
    },
    "irrigated_sqft": {
      "type": "integer",
      "required": false
    },
    "covered_parking_sqft": {
      "type": "integer",
      "required": false
    },
    "partially_covered_parking_sqft": {
      "type": "integer",
      "required": false
    },
    "uncovered_parking_sqft": {
      "type": "integer",
      "required": false
    }
  }
}

200 response

{
  "id": 1,
  "buildings_count": 0,
  "covered_parking_sqft": null,
  "electric_meters_count": 0,
  "draft_buildings_count": 0,
  "gas_meters_count": 0,
  "irrigated_sqft": 5000,
  "legal_owner": "Jane Doe",
  "manager": "John Smith",
  "name": "My Development",
  "n_apartments": null,
  "n_bedrooms": null,
  "oil_meters_count": 0,
  "partially_covered_parking_sqft": null,
  "propane_meters_count": 0,
  "sqft": null,
  "steam_meters_count": 0,
  "uncovered_parking_sqft": null,
  "water_meters_count": 0
}

400 response

{
  "errors": "Legal owner can't be blank"
}

Update development

PUT
/api/v1/wego_pro/developments/{id}

Update a development

The schema is the same as for creation.

200 response

{
  "id": 1,
  "buildings_count": 0,
  "covered_parking_sqft": null,
  "electric_meters_count": 0,
  "draft_buildings_count": 0,
  "gas_meters_count": 0,
  "irrigated_sqft": 5000,
  "legal_owner": "Jane Doe",
  "manager": "John Smith",
  "name":  "My Updated Development",
  "n_apartments": null,
  "n_bedrooms": null,
  "oil_meters_count": 0,
  "partially_covered_parking_sqft": null,
  "propane_meters_count": 0,
  "sqft": null,
  "steam_meters_count": 0,
  "uncovered_parking_sqft": null,
  "water_meters_count": 0
}

400 response

{
  "errors": "Legal owner can't be blank"
}

Destroy a development

DELETE
/api/v1/wego_pro/developments/{id}

This will destroy a development owned by the authorized user. The server will respond with status code 204 with no body if the development is succesfully destroyed. If the development is not found the server will respond with a 404.

It is important to note that destroying a development cascades. Any buildings, associated apartments, meters and data will be destroyed as well.

Meters

Meters by user

GET
/api/v1/wego_pro/users/{username}/meters

Get a list of meters associated with a given WegoWise user.

200 response

[
  {
    "account_number": "78734039A",
    "id": 1,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 2,
    "coverage": "all",
    "nickname": null,
    "notes": "Some notes",
    "scope": "BuildingMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  },

  {
    "account_number": "78734039B",
    "id": 2,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 1,
    "coverage": "common",
    "nickname": null,
    "notes": "Some notes",
    "scope": "BuildingMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  }
]

404 response

{
  "errors": "User not found"
}

Meters by apartment

GET
/api/v1/wego_pro/apartments/{id}/meters

Get a list of meters linked to the specified apartment.

200 response

[
  {
    "account_number": "78734039A",
    "id": 1,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 1,
    "coverage": "apartment",
    "nickname": null,
    "notes": "Some notes",
    "scope": "ApartmentMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  },

  {
    "account_number": "78734039B",
    "id": 2,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 1,
    "coverage": "apartment",
    "nickname": "Water heater meter",
    "notes": "Some notes",
    "scope": "ApartmentMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  }
]

404 response

{
  "errors": "Apartment not found"
}

Meters by area

GET
/api/v1/wego_pro/areas/{id}/meters

Get a list of meters for a given commercial building area.

200 response

[
  {
    "account_number": "78734039A",
    "id": 1,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 1,
    "coverage": "area",
    "nickname": null,
    "notes": "Some notes",
    "scope": "AreaMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  },

  {
    "account_number": "78734039B",
    "id": 2,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 1,
    "coverage": "area",
    "nickname": null,
    "notes": "Some notes",
    "scope": "AreaMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  }
]

404 response

{
  "errors": "Area not found"
}

Meters by building

GET
/api/v1/wego_pro/buildings/{id}/meters

Get a list of meters for a given building.

200 response

[
  {
    "account_number": "78734039A",
    "id": 1,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 2,
    "coverage": "all",
    "nickname": null,
    "notes": "Some notes",
    "scope": "BuildingMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  },

  {
    "account_number": "78734039B",
    "id": 2,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 1,
    "coverage": "common",
    "nickname": null,
    "notes": "Some notes",
    "scope": "BuildingMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  }
]

404 response

{
  "errors": "Building not found"
}

Meters by development

GET
/api/v1/wego_pro/developments/{id}/meters

Get a list of meters for a given development. This would include any building, apartment or commercial building area meters defined for structures within that development.

200 response

[
  {
    "account_number": "78734039A",
    "id": 1,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 2,
    "coverage": "all",
    "nickname": null,
    "notes": "Some notes",
    "scope": "BuildingMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  },

  {
    "account_number": "78734039B",
    "id": 2,
    "data_type": "Gas",
    "tenant_pays": false,
    "buildings_count": 1,
    "coverage": "common",
    "nickname": null,
    "notes": "Some notes",
    "scope": "BuildingMeter",
    "utility_company":
      {
        "name": "NSTAR"
      }
  }
]

404 response

{
  "errors": "Property not found"
}

View meter

GET
/api/v1/wego_pro/meters/{id}

Get information about a meter.

200 response

{
  "account_number": "78734039A",
  "id": 1,
  "data_type": "Gas",
  "tenant_pays": false,
  "buildings_count": 2,
  "coverage": "all",
  "nickname": "New meter",
  "notes": "Some notes",
  "scope": "BuildingMeter",
  "utility_company":
    {
      "name": "NSTAR"
    }
}

404 response

{
  "errors": "Meter not found"
}

Create building meter

POST
/api/v1/wego_pro/buildings/{id}/meters

Create a meter for a building that the authorized user has edit access to. When a username and password are provided for a utility company that supports imports a utility login will be created automatically for the meter and data will be imported.

Note: Either utility_company_id or other_utility_company must be specified. A list of utility companies can be found using the public utility companies end point.

Request body

{
  "account_number": "123456789",
  "utility_company_id": 231,
  "username": "jane_smith",
  "password": "pasword123",
  "coverage": "all",
  "n_buildings": 1,
  "data_type": "Gas",
  "nickname": "New meter"
}

Schema

{
  "type": "object",
  "required": true,
  "properties": {
    "account_number": {
      "type": "string",
      "required": true
    },
    "data_type": {
      "enum": [
        "Electric",
        "Gas",
        "Oil",
        "Water",
        "Total_energy"
      ]
    },
    "coverage": {
      "enum": [
        "all",
        "common"
      ]
    },
    "n_buildings": {
      "type": "integer",
      "required": true
    },
    "nickname": {
      "type": "string",
      "required": false
    },
    "notes": {
      "type": "string",
      "required": false
    },
    "username": {
      "type": "string"
    },
    "password": {
      "type": "string"
    },
    "utility_company_id": {
      "type": "string"
    },
    "other_utility_company": {
      "type": "string"
    }
  }
}

200 response

{
  "buildings_count": 1,
  "coverage": "all",
  "data_type": "Gas",
  "id": 1,
  "scope": "BuildingMeter",
  "notes": null,
  "nickname": "New meter",
  "utility_company":
    {
      "id": 1,
      "name": "National Grid"
    }
}

400 response

{
  "errors": "Account number is invalid"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Create apartment meter

POST
/api/v1/wego_pro/apartments/{id}/meters

Create a meter for an apartment that the authorized user has edit access to. When a username and password are provided for a utility company that supports imports a utility login will be created automatically for the and data will be imported.

Note: Either utility_company_id or other_utility_company must be specified. A list of utility companies can be found using the public utility companies end point.

Request body

{
  "account_number": "123456789",
  "utility_company_id": 231,
  "username": "jane_smith",
  "password": "pasword123",
  "data_type": "Gas",
  "tenant_pays": false
}

Schema

{
  "type": "object",
  "required": true,
  "properties": {
    "account_number": {
      "type": "string",
      "required": true
    },
    "tenant_pays": {
      "type": "boolean",
      "required": true
    },
    "data_type": {
      "enum": [
        "Electric",
        "Gas",
        "Oil",
        "Water",
        "Total_energy"
      ]
    },
    "nickname": {
      "type": "string",
      "required": false
    },
    "notes": {
      "type": "string",
      "required": false
    },
    "username": {
      "type": "string"
    },
    "password": {
      "type": "string"
    },
    "utility_company_id": {
      "type": "string"
    },
    "other_utility_company": {
      "type": "string"
    }
  }
}

200 response

{
  "buildings_count": 1,
  "coverage": "apartment",
  "data_type": "Gas",
  "id": 1,
  "scope": "ApartmentMeter",
  "notes": null,
  "utility_company":
    {
      "id": 1,
      "name": "National Grid"
    },
  "tenant_pays": false
}

400 response

{
  "errors": "Account number is invalid"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Create area meter

POST
/api/v1/wego_pro/areas/{id}/meters

Create a meter for an area that the authorized user has edit access to. When a username and password are provided for a utility company that supports imports a utility login will be created automatically for the and data will be imported.

Note: Either utility_company_id or other_utility_company must be specified. A list of utility companies can be found using the public utility companies end point.

Request body

{
  "account_number": "123456789",
  "utility_company_id": 231,
  "username": "jane_smith",
  "password": "pasword123",
  "data_type": "Gas",
  "tenant_pays": false
}

Schema

{
  "type": "object",
  "required": true,
  "properties": {
    "account_number": {
      "type": "string",
      "required": true
    },
    "tenant_pays": {
      "type": "boolean",
      "required": true
    },
    "data_type": {
      "enum": [
        "Electric",
        "Gas",
        "Oil",
        "Water",
        "Total_energy"
      ]
    },
    "nickname": {
      "type": "string",
      "required": false
    },
    "notes": {
      "type": "string",
      "required": false
    },
    "username": {
      "type": "string"
    },
    "password": {
      "type": "string"
    },
    "utility_company_id": {
      "type": "string"
    },
    "other_utility_company": {
      "type": "string"
    }
  }
}

200 response

{
  "buildings_count": 1,
  "coverage": "all",
  "data_type": "Gas",
  "id": 1,
  "scope": "AreaMeter",
  "nickname": null,
  "notes": null,
  "utility_company":
    {
      "id": 1,
      "name": "National Grid"
    },
  "tenant_pays": false
}

400 response

{
  "errors": "Account number is invalid"
}

Building Type
sf_detached:
Detached home (not connected to any other buildings)
sf_attached:
Townhouse / Row house (shares wall(s) with another building)
apt_condo:
Apartment / Condo
mobile_home:
Mobile home
multifamily:
Multi-family home
lowrise:
Low-rise / garden-style apartment building
midrise:
Mid-rise apartment building
highrise:
High-rise apartment building
Construction
wood_steel:
Wood or steel frame
concrete:
Solid concrete
masonry:
Masonry (load-bearing)
modular:
Modular
sips:
Structurally insulated panels (SIPS)
other:
Other
Cooling System
window_ac:
Window AC
sleeve:
Room AC in sleeve (through wall)
mini_split:
Ductless mini-split
ptac:
PTAC unit
central:
Ducted central AC (Outdoor condenser)
rooftop:
Packaged rooftop cooling system
ground_heat_pump:
Ground-source heat pump
tower_heat_pump:
Cooling tower with heat pumps
air_chiller:
Air-cooled chiller
water_chiller:
Water-cooled chiller (Cooling tower)
none:
None
other:
Other
Heating System
furnace:
Furnace
h_e_furnace:
Furnace (High-efficiency condensing)
steam_boiler:
Boiler (Steam)
hot_water_boiler:
Boiler (Hot water)
h_e_boiler:
Boiler (High-efficiency condensing)
apt_heat_pumps:
Boiler (Heat pumps in apartments)
ground_heat_pump:
Heat pump (Ground-source)
air_heat_pump:
Heat pump (Air-source)
hot_water:
Hot water heater
h_e_hot_water:
Hot water heater (High-efficiency condensing)
baseboard:
Electric baseboard
ptac:
PTAC units
other:
Other
Hot Water System
indirect_with_heat:
Indirect hot water tank off boiler (Heat & DHW)
indirect_boiler:
Indirect hot water tank off dedicated boiler
tankless_coil:
Tankless coil in boiler
stand_alone:
Stand-alone storage water heater
on_demand:
On-demand/Instantaneous
cogen:
Cogeneration
other:
Other
Resident Type
elderly:
Elderly
student:
Students
family:
Families with children
other:
Mixed/None of the above
Dryer Fuel
Electric:
Electric dryers
Gas:
Gas dryers
Pool Fuel
none:
Not heated
electric:
Electric heated
gas:
Gas heated
solar:
Solar panel heating

Update meter

PUT
/api/v1/wego_pro/meters/{id}

Update a meter that can be edited by the authorized user.

Request body

{
  "notes": "Some notes"
}

200 response

{
  "buildings_count": 1,
  "coverage": "all",
  "data_type": "Gas",
  "id": 1,
  "scope": "BuildingMeter",
  "nickname": null,
  "notes": null,
  "utility_company":
    {
      "id": 1,
      "name": "National Grid"
    }
}

400 response

{
  "errors": "Coverage is invalid"
}

Destroy a meter

DELETE
/api/v1/wego_pro/meters/{id}

This will destroy a meter that the authorized user has edit access to. The server will respond with status code 204 with no body if the meter is succesfully destroyed. If the meter is not found the server will respond with a 404.

It is important to note that destroying a meter cascades. Any associated data will be destroyed as well.

Link a meter

POST
/api/v1/wego_pro/buildings/{id}/link_meter

This end point links a meter with an additional building. The meter must already belong to a building that resides in the same development and the difference between the meter n_buildings and building_count must be at least one. The authorized user must have edit access for both meter and building.

Request body

{
  "meter_id": 1
}

200 response

{
  "buildings_count": 1,
  "coverage": "all",
  "data_type": "Gas",
  "id": 1,
  "scope": "BuildingMeter",
  "nickname": null,
  "notes": null,
  "utility_company":
    {
      "id": 1,
      "name": "National Grid"
    }
}

400 response

{
  "errors": "Meter cannot be linked to this structure"
}

Unlink a meter

DELETE
/api/v1/wego_pro/buildings/{id}/unlink_meter

This will unlink a meter and a building. The server will respond with status code 204 with no body if the meter is unlinked succesfully. If the meter is not found the server will respond with a 404. The authorized user must have edit access to both the meter and the building.

Request body

{
  "meter_id": 1
}

Meter Structures

List parent structures for a meter

GET
/api/v1/wego_pro/meters/{id}/structures

Get a list of structures associated with the given meter. Parent structures for an apartment meter, for example, would include the apartment, the building in which the apartment is located, and the development that contains the apartment building.

200 response

[
  {
    "name": "Northwest Apartments",
    "id": 230,
    "sqft": 55000,
    "type": "Development"
  },

  {
    "name": "West Building",
    "id": 1245,
    "sqft": 18000,
    "type": "Building"
  },

  {
    "name": "Unit 12",
    "id": 4049,
    "sqft": 1000,
    "type": "Apartment"
  }
]

404 response

{
  "errors": "Meter not found"
}

Upgrade Categories

List upgrade categories

GET
/api/v1/wego_pro/upgrade_categories

Lists categories that may be assigned to a building upgrade.

200 response

[
  {
    "id": 1,
    "name": "HVAC",
    "assignable": false,
    "description": null,
    "parent_id": null
  },

  {
    "id": 2,
    "name": "Heating",
    "assignable": false,
    "description": "Replacement of heating system, insulating of heating pipes, air sealing heating ductwork, retro-commissioning",
    "parent_id": 1
  },

  {
    "id": 3,
    "name": "Mechanical Equipment",
    "assignable": true,
    "description": null,
    "parent_id": 2
  },

  {
    "id": 4,
    "name": "Fuel Switch",
    "assignable": true,
    "description": null,
    "parent_id": 2
  }
]

Building Upgrades

List building upgrades

GET
/api/v1/wego_pro/buildings/{id}/upgrades

Get a list of upgrades that have been defined for a building.

200 response

[
  {
    "id": 1,
    "building_id": 1,
    "name": "New Common area lighting",
    "start_date": "2014-05-01",
    "end_date": "2014-05-01",
    "before": "Older T12 and CFLs Were in the Common Areas",
    "after": "LED Installed in Common Areas and Basement",
    "cost": "100.0",
    "expected_savings": 12,
    "categories": [{ "category_id": 321,
                     "name": "Lighting" },
                   { "category_id": 462,
                     "name": "Common" }]
  },

  {
    "id": 2,
    "building_id": 1,
    "name": "Insulation",
    "start_date": "2014-05-01",
    "end_date": "2014-05-01",
    "before": "No exterior insulation",
    "after": "Blown in cellulose insulation",
    "cost": "100.0",
    "expected_savings": 12,
    "categories": [{ "category_id": 235,
                     "name": "Building envelope" },
                   { "category_id": 567,
                     "name": "Insulation" }]
  }
]

404 response

{
  "errors": "Building not found"
}

Show a building upgrade

GET
api/v1/wego_pro/building_upgrades/{id}

Show an upgrade that has been defined for a building. An upgrade represents an improvement to a building that has been made during a defined time period. Wegowise uses building upgrades to help analyze the affect an upgrade has on energy user/carbon footprint.

200 response

{
  "id": 1,
  "building_id": 1,
  "name": "New Common area lighting",
  "start_date": "2014-05-01",
  "end_date": "2014-05-01",
  "before": "Older T12 and CFLs Were in the Common Areas",
  "after": "LED Installed in Common Areas and Basement",
  "cost": "100.0",
  "expected_savings": 12,
  "categories": [{ "category_id": 321,
                   "name": "Lighting" },
                 { "category_id": 462,
                   "name": "Common" }]
}

404 response

{
  "errors": "Building upgrade not found"
}

Create a building upgrade

POST
/api/v1/wego_pro/buildings/{id}/upgrades

Creates an upgrade for a building.

Upgrades may be categorized by including an array of category objects. Categories can be hierarchical, i.e. Building Envelope -> Insulation. It is only necessary to apply the specific category, in this case Insulation, any parent categories will be automatically added. A list of upgrade categories can be retrieved using the Upgrade Categories end point.

Request body

{
  "end_date": "2014-05-01",
  "before": "Older T12 and CFLs Were in the Common Areas",
  "after": "LED Installaed in Common Areas and Basement",
  "name": "New Common area lighting",
  "cost": "100.00",
  "expected_savings": "12",
  "start_date": "2014-05-01",
  "categories":
    [
      {
        "category_id": 3
      }
    ]
}

Schema

{
  "type": "object",
  "required": true,
  "properties": {
    "building_id": {
      "type": "integer",
      "required": true
    },
    "start_date": {
      "type": "date",
      "required": true
    },
    "end_date": {
      "type": "date",
      "required": true
    },
    "before": {
      "type": "string",
      "required": true
    },
    "after": {
      "type": "string",
      "required": true
    },
    "name": {
      "type": "string",
      "required": true
    },
    "cost": {
      "type": "decimal"
    },
    "expected_savings": {
      "type": "integer"
    },
    "categories": {
      "type": "array",
      "required": false,
      "items": {
        "type": "object",
        "properties": {
          "category_id": {
            "type": "integer",
            "required": true
          }
        }
      }
    }
  }
}

200 response

{
  "id": 1,
  "building_id": 1,
  "name": "New Common area lighting",
  "start_date": "2014-05-01",
  "end_date": "2014-05-01",
  "before": "Older T12 and CFLs Were in the Common Areas",
  "after": "LED Installed in Common Areas and Basement",
  "cost": "100.0",
  "expected_savings": 12,
  "categories": [{ "category_id": 321,
                   "name": "Lighting" },
                 { "category_id": 462,
                   "name": "Common" }]
}

400 response

{
  "errors": "Must specify start date"
}

Update building upgrade

PUT
api/v1/wego_pro/building_upgrades/{id}

Update a building upgrade for a building that can be edited by the authorized user.

When applying a category it is necessary to list all categories for the upgrade. For example, if an upgrade already has category 3 applied and category 4 is to be added it is necessary to include both category 3 and 4 in the update request.

Request body

{
  "before": "Older Incandescents Were in the Common Areas",
  "categories":
    [
      {
        "category_id": 3
      },
      {
        "category_id": 4
      }
    ]
}

200 response

{
  "id": 1,
  "building_id": 1,
  "name": "New Common area lighting",
  "start_date": "2014-05-01",
  "end_date": "2014-05-01",
  "before": "Older T12 and CFLs Were in the Common Areas",
  "after": "LED Installed in Common Areas and Basement",
  "cost": "100.0",
  "expected_savings": 12,
  "categories": [{ "category_id": 321,
                   "name": "Lighting" },
                 { "category_id": 462,
                   "name": "Common" }]
}

400 response

{
  "errors": "Must specify start date"
}

Destroy a building upgrade

DELETE
api/v1/wego_pro/building_upgrades/{id}

This will destroy a building upgrade for a building owned by the authorized user. The server will respond with status code 204 with no body if the building upgrade is succesfully destroyed. If the building or upgrade is not found the server will respond with a 404.

User

Show user information

GET
/api/v1/wego_pro/user

Show information about the authenticated user.

200 response

{
  "id": 3472,
  "username": "api_user",
  "phone": "(123) 456-1234",
  "first_name": "Joe",
  "last_name": "Schmoe",
  "organization": ""
}

404 response

{
  "errors": "User not found"
}

Organizations

List user organizations

GET
/api/v1/wego_pro/organizations

Lists the organization that a user belongs to. Note that a user may only be added to an organization via the WegoWise website and since the organization listed under the owner is entered when the user is created it may not match.

200 response

[
  {
    "id": 2344,
    "name": "Housing Analysis",
    "owner" :
      {
        "id": 1,
        "username": "jpsmith",
        "phone": "123-555-1212",
        "person_id": 1,
        "first_name": "Joe",
        "last_name": "Smith",
        "organization": "WW Property Management"
      }
  },

  {
    "id": 352,
    "name": "Housing Management",
    "owner":
      {
        "id": 3,
        "username": "janedoe",
        "phone": null,
        "person_id": 3,
        "first_name": "Jane",
        "last_name": "Doe",
        "organization": "Celestron Inc."
      }
  }
]

Lists an organization's members

GET
/api/v1/wego_pro/organizations/{id}/members

Lists the members of an organization if the authenticated user is an admin or the owner of an organization. Note that the listed user's organization is the name of the organization entered when the user was created and it may not match.

200 response

[
  {
    "id": 456,
    "role": "admin",
    "access": "edit",
    "organization_id": 571,
    "user":
      {
        "id": 3472,
        "username": "api_user",
        "phone": "(123) 456-1234",
        "first_name": "Joe",
        "last_name": "Schmoe",
        "organization": ""
      }
  },
  {
    "id": 9245,
    "role": "owner",
    "access": "edit",
    "organization_id": 723,
    "user":
      {
        "id": 456,
        "username": "anotheruser",
        "phone": "(123) 456-1234",
        "first_name": "Jane",
        "last_name": "Doe",
        "organization": ""
      }
  }
]

Utility Companies

List utility companies

GET
/api/v1/utility_companies

WegoWise has the ability to automatically import data from a number of utility providers. This endpoint returns a list of the companies that WegoWise can currently import from.

200 response

[
  {
    "id": 23,
    "data_type": "Gas",
    "name": "Con Edison",
    "short_name": "ConEd",
    "state_code": "PA",
    "country": "United States",
    "currency": "USD"
  },

  {
    "id": 33,
    "data_type": "Water",
    "name": "Los Angeles Dept. of Water & Power",
    "short_name": "LADWP",
    "state_code": "CA",
    "country": "United States",
    "currency": "USD"
  },

  {
    "id": 34,
    "data_type": "Electric",
    "name": "Los Angeles Dept. of Water & Power",
    "short_name": "LADWP",
    "state_code": "CA",
    "country": "United States",
    "currency": "USD"
  }
]