create home
curl --request POST \
--url https://api.example.com/v1/homes/create \
--header 'Content-Type: application/json' \
--header 'x-ws-api-key: <api-key>' \
--data '
{
"name": "My Test Home",
"zipcode": "95313",
"utilityId": "14328",
"ratePlanId": "6915de25881cbc6041e4c7f1",
"solarSystemSizeKw": 5,
"isNonNetMetered": false
}
'import requests
url = "https://api.example.com/v1/homes/create"
payload = {
"name": "My Test Home",
"zipcode": "95313",
"utilityId": "14328",
"ratePlanId": "6915de25881cbc6041e4c7f1",
"solarSystemSizeKw": 5,
"isNonNetMetered": False
}
headers = {
"x-ws-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-ws-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'My Test Home',
zipcode: '95313',
utilityId: '14328',
ratePlanId: '6915de25881cbc6041e4c7f1',
solarSystemSizeKw: 5,
isNonNetMetered: false
})
};
fetch('https://api.example.com/v1/homes/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/homes/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Test Home',
'zipcode' => '95313',
'utilityId' => '14328',
'ratePlanId' => '6915de25881cbc6041e4c7f1',
'solarSystemSizeKw' => 5,
'isNonNetMetered' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-ws-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/homes/create"
payload := strings.NewReader("{\n \"name\": \"My Test Home\",\n \"zipcode\": \"95313\",\n \"utilityId\": \"14328\",\n \"ratePlanId\": \"6915de25881cbc6041e4c7f1\",\n \"solarSystemSizeKw\": 5,\n \"isNonNetMetered\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-ws-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/homes/create")
.header("x-ws-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My Test Home\",\n \"zipcode\": \"95313\",\n \"utilityId\": \"14328\",\n \"ratePlanId\": \"6915de25881cbc6041e4c7f1\",\n \"solarSystemSizeKw\": 5,\n \"isNonNetMetered\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/homes/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-ws-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My Test Home\",\n \"zipcode\": \"95313\",\n \"utilityId\": \"14328\",\n \"ratePlanId\": \"6915de25881cbc6041e4c7f1\",\n \"solarSystemSizeKw\": 5,\n \"isNonNetMetered\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "ws_home_123456789",
"createdAt": "2025-01-02T12:00:00.000Z",
"updatedAt": "2025-01-02T12:00:00.000Z",
"name": "My home",
"userId": "user_123456789",
"UtilityId": "12199",
"ratePlanId": "6915de25881cbc6041e4c7f1",
"unstructuredAddress": null,
"timezone": "America/Los_Angeles",
"country": "US",
"city": "San Francisco",
"zipcode": "94107",
"streetAddress": "123 Market St",
"meterId": null,
"meterIdSource": null,
"energyMarketBiddingEnabled": true,
"enabled": true,
"carbonSignalIntensity": "MEDIUM",
"channelPartnerId": null
}{
"request_id": "req_123",
"error_code": "VALIDATION_FAILED",
"message": "Request validation failed.",
"field_errors": [
{
"field": "zipcode",
"message": "zipcode is invalid"
}
]
}{
"request_id": "req_123",
"error_code": "AUTH_MISSING_API_KEY",
"message": "Missing x-ws-api-key header.",
"recovery_action": "Provide the x-ws-api-key header. If this contradicts the public docs or OpenAPI contract, submit structured feedback through /v1/feedback."
}homes
create home
POST
/
v1
/
homes
/
create
create home
curl --request POST \
--url https://api.example.com/v1/homes/create \
--header 'Content-Type: application/json' \
--header 'x-ws-api-key: <api-key>' \
--data '
{
"name": "My Test Home",
"zipcode": "95313",
"utilityId": "14328",
"ratePlanId": "6915de25881cbc6041e4c7f1",
"solarSystemSizeKw": 5,
"isNonNetMetered": false
}
'import requests
url = "https://api.example.com/v1/homes/create"
payload = {
"name": "My Test Home",
"zipcode": "95313",
"utilityId": "14328",
"ratePlanId": "6915de25881cbc6041e4c7f1",
"solarSystemSizeKw": 5,
"isNonNetMetered": False
}
headers = {
"x-ws-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-ws-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'My Test Home',
zipcode: '95313',
utilityId: '14328',
ratePlanId: '6915de25881cbc6041e4c7f1',
solarSystemSizeKw: 5,
isNonNetMetered: false
})
};
fetch('https://api.example.com/v1/homes/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/homes/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Test Home',
'zipcode' => '95313',
'utilityId' => '14328',
'ratePlanId' => '6915de25881cbc6041e4c7f1',
'solarSystemSizeKw' => 5,
'isNonNetMetered' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-ws-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/homes/create"
payload := strings.NewReader("{\n \"name\": \"My Test Home\",\n \"zipcode\": \"95313\",\n \"utilityId\": \"14328\",\n \"ratePlanId\": \"6915de25881cbc6041e4c7f1\",\n \"solarSystemSizeKw\": 5,\n \"isNonNetMetered\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-ws-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/homes/create")
.header("x-ws-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My Test Home\",\n \"zipcode\": \"95313\",\n \"utilityId\": \"14328\",\n \"ratePlanId\": \"6915de25881cbc6041e4c7f1\",\n \"solarSystemSizeKw\": 5,\n \"isNonNetMetered\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/homes/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-ws-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My Test Home\",\n \"zipcode\": \"95313\",\n \"utilityId\": \"14328\",\n \"ratePlanId\": \"6915de25881cbc6041e4c7f1\",\n \"solarSystemSizeKw\": 5,\n \"isNonNetMetered\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "ws_home_123456789",
"createdAt": "2025-01-02T12:00:00.000Z",
"updatedAt": "2025-01-02T12:00:00.000Z",
"name": "My home",
"userId": "user_123456789",
"UtilityId": "12199",
"ratePlanId": "6915de25881cbc6041e4c7f1",
"unstructuredAddress": null,
"timezone": "America/Los_Angeles",
"country": "US",
"city": "San Francisco",
"zipcode": "94107",
"streetAddress": "123 Market St",
"meterId": null,
"meterIdSource": null,
"energyMarketBiddingEnabled": true,
"enabled": true,
"carbonSignalIntensity": "MEDIUM",
"channelPartnerId": null
}{
"request_id": "req_123",
"error_code": "VALIDATION_FAILED",
"message": "Request validation failed.",
"field_errors": [
{
"field": "zipcode",
"message": "zipcode is invalid"
}
]
}{
"request_id": "req_123",
"error_code": "AUTH_MISSING_API_KEY",
"message": "Missing x-ws-api-key header.",
"recovery_action": "Provide the x-ws-api-key header. If this contradicts the public docs or OpenAPI contract, submit structured feedback through /v1/feedback."
}Authorizations
x-ws-api-keyx-ws-api-key
WattShift API key
Headers
WattShift API Key
Body
application/json
The name of the home
Required string length:
1 - 255The ID of the owner of the home
Deprecated utility ID
The utility ID
The rate plan ID
The unstructured address
The client ID
The country
The city
The zip code
The street address
Solar installation information
Show child attributes
Show child attributes
Solar system size in kW; creates or updates solar info when set with isNonNetMetered
Non-net-metered solar billing flag; creates or updates solar info when set with solarSystemSizeKw
The carbon signal intensity
Available options:
LOW, MEDIUM, HIGH Available options:
leap This is to check if the home is enabled
Optional tracking for channel partners (requires using a valid ID)
Whether this home was created from the modal flow
Response
Available options:
LOW, MEDIUM, HIGH 