Overview
This documentation explains how to integrate with SolarFax using our API.
Technology
Our API is RESTful using JSON. All endpoints have a base URL of:https://api.solardatapros.com/api/v1/
Authentication
To use our API, you need to request an Api-Key and Access-Token pair from support. These are sent with each API endpoint as headers. If your keys are compromised, contact support for replacements.
Example usage:
curl -H 'Api-Key: KEY' -H 'Access-Token: TOKEN' 'https://api.solardatapros.com/api/v1/accounts
Formats
Responses
All responses return success which is true or false. Additional information will be returned as message. Example:
{"success":false,"message":"invalid api_key: KEY"}
Timestamps
All date and datetime fields will be in ISO 8601 format. Example:2011-11-042011-11-04T00:05:23
API Endpoints
accounts - search accountsThere are four ways to search accounts:
- Text based search. The fields that are searched are:
user.full_nameandaddress.address_one.
Example request:
Example response:accounts?search_term=123+East+St
{ "success": true, "message": "", "company": "Company Name", "count": 1, "accounts": [ { "id": 0, "inverter": "SolarEdge", "utility": "PG&E" "address": { "address_one": "123 Easy St", "address_two": "", "city": "Mountain View", "state": "CA", "zip_code": "94043", "latitude": 37.3927515, "longitude": -122.0682099, }, "user": { "id": 4, "first_name": "Adam", "last_name": "Ant", "email": "easy@email.com", "phone": "408-555-5555" }, }, ], } - Geolocation based search via latitude/longitude. Provide a latitude/longitude pair and a distance (in miles) and we return accounts within that parameter.
Added response includedistanceandgeocode.
Example request:
accounts?geocode=37.3927515,-122.0682099&distance=2 - Geolocation based search via address. Provide address (like google map search) and a distance (in miles) and we return accounts within that parameter.
Added response includedistanceandgeocode.
Example request:
accounts?address=123+Easy+St,+Mountain+View,+CA+94043&distance=2 - ID lookup. This lets you get a specific account.
Example request:
accounts?id=0
intervals - get interval data for an accountParameters:
| account_id | ID of the account |
| date_start | Start of the date range (ISO 8601) |
| date_end | End of the date range (ISO 8601, inclusive) |
| interval | Interval length (minutes, 15 or 60) |
| max | Return max interval only (boolean, 0 or 1) |
Restrictions: supports up to 12 months per call
Example request:
intervals?account_id=0&date_start=5/1/2023&date_end=5/1/2023
Example response:
{
"success": true,
"message": "",
"company": "Company Name",
"account": {
"date_data_first": "2015-05-05T00:00:00",
"date_data_last": "2023-05-31T23:45:00",
"id": 0
},
"user": {
"first_name": First",
"last_name": "Last",
"id": 0
},
"date_end": "2023-05-01",
"date_start": "2023-05-01",
"type": "Electricity",
"units": "uWh"
"count": 24,
"intervals": [
{
"date": "2023-05-01",
"time_end": "01:00",
"time_start": "00:00",
"usage_in": 421200,
"usage_out": 0,
"usage_net": 421200,
},
{
"date": "2023-05-01",
"time_end": "02:00",
"time_start": "01:00",
"usage_in": 402400,
"usage_out": 0,
"usage_net": 402400,
},
...
{
"date": "2023-05-01",
"time_end": "00:00",
"time_start": "23:00",
"usage_in": 681300,
"usage_out": 0,
"usage_net": 681300,
}
],
}
Example "max interval" request:
intervals?account_id=0&date_start=5/1/2023&date_end=5/1/2023&max=1
Example "max interval" response:
{
"success": true,
"message": "",
"company": "Company Name",
"account": {
"date_data_first": "2015-05-05T00:00:00",
"date_data_last": "2023-05-31T23:45:00",
"id": 0
},
"user": {
"first_name": First",
"last_name": "Last",
"id": 0
},
"date_end": "2023-05-01",
"date_start": "2023-05-01",
"type": "Electricity",
"units": "uWh"
"max": {
"value": 1940000,
"date": "2023-05-31T07:00:00",
"duration": 15
},
}
Note that the max interval (minutes) is returned with whatever duration the interval data is, which is typically 15 minutes 1 hour. To convert to "max hour":
value = (value / duration) * 60
Parameters: JSON object data
Fields:
| user | firstName |
User first name |
| lastName |
User last name |
|
|
User email address |
||
| enableAccess |
Allow the user to login. A random password is auto-generated. |
|
| enableEmails |
Enable weekly emails sent to user. |
|
| account | phone |
Account phone |
| addressOne |
Account address one |
|
| city |
Account city |
|
| state |
Account state |
|
| zip |
Account zip |
|
| isLead |
Account is a lead (vs customer) |
|
| link | link_reset, link_set, link_access |
Return a link: Password Reset, Password Set, or Open Access. Used to send in an email to the user. Reset and Set must also pass enableAccess. These links expire in 14 days for security purposes. |
| test | 0,1 |
Test mode, does not create a user just returns a response |
Example request:
curl -H 'Content-Type: application/json' -H 'Api-Key: KEY' -H 'Access-Token: TOKEN' -X POST -d '{"user": {"firstName": "fname", "lastName": "lname", "email": "x@t.com", "enableAccess": "0", "enableEmails": "0"}, "account": {"phone": "PHONE", "addressOne": "STREET", "city": "CITY", "state": "STATE", "zip": "ZIP", "isLead": "0"}, "test": "1"}' https://api.solardatapros.com/api/v1/users
Example response:
{
"success": true,
"message": "User 'User Name' created",
"action": "created",
"account_id": ID,
"user_id": ID,
"company": "Company Name",
}