Solar Monkey API API Reference
In version 3 of the Solar Monkey API, multiple endpoints are made available to get information about your projects, or to create them. Quote details are included in the Project Detail endpoint.
Rate limits
Currently no rate limits are in place, but we might add them without notice if clients start to misbehave (In which case you will get an HTTP 429/Too Many Requests Response). Please use our endpoints responsibly.
Pagination
Pagination is done akin to the
Github pagination, using a Link
header, and with the addition of a X-Total-Count
header that denotes the total amount of results. There may be next
, prev
, first
and last
parts that you can use to obtain the link for the page you want. The Python
requests library will
parse this automatically for you. Don't use the format of the urls to build your own, they may change unannounced!
API Endpoint
https://api.solarmonkey.nl/v3
Request Content-Types: application/json
Response Content-Types: application/json
Schemes: https
Version: v3
Authentication
Basic
Basic access is the authentication method used. Use your access key and secret key credentials.
Address
Get possible addresses for the given address components.
In order to create a project, a valid address must be provided as input. This endpoint can be used to verify the validity of an address. If multiple addresses match the input (for example because of housenumber suffixes), they are all returned. If the address is not valid, no results are returned.
Besides country
, either:
postcode
&housenumber
- or
city
,street
&housenumber
are required.
Valid addresses list
Unauthorized
Not Found
Response Example (200 OK)
[
{
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
}
]
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
batteries
Get info for specific battery for API.
As long as a user is authenticated they may look at any object, so the default DRF retrieve view is all we need.
A unique integer value identifying this Battery.
Response Example (200 OK)
{
"id": "integer",
"manufacturer": "string",
"model": "string",
"usable_energy_kwh": "number"
}
Catalogue
GET /catalogue/elements/
Return a list of all accessible catalogue elements.
Catalogue elements
Unauthorized
Not Found
Response Example (200 OK)
[
{
"id": "integer",
"sku": "string",
"enabled": "boolean",
"element_type": "string",
"element_id": "integer",
"element_url": "string (uri)",
"names": "object",
"descriptions": "object",
"price": "string (decimal)"
}
]
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
GET /catalogue/packages/
Return a list of all accessible catalogue packages.
Catalogue packages
Unauthorized
Not Found
Response Example (200 OK)
[
{
"id": "integer",
"name": "string",
"panel_count": "integer",
"price": "string (decimal)",
"panel_id": "integer",
"sku": "string",
"descriptions": "object",
"panel_url": "string",
"inverter_id": "integer",
"inverter_url": "string",
"optimizer_id": "integer",
"optimizer_url": "string"
}
]
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
Delayed Results
Return the status of a task, and when it's finished, the result.
There is no error response. In case you pass a non-existing id, the status will be PENDING
.
(no description)
Status and result
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Inverters
GET /inverters/{id}/
Return the details of an inverter.
A unique integer value identifying this Inverter.
Inverter details
Unauthorized
Not Found
Response Example (200 OK)
{
"id": "integer",
"model": "string",
"manufacturer": "string",
"specsheet": "string (uri)",
"sort_key": "string",
"efficiency": "string (decimal)",
"remarks": "string",
"watt_peak": "integer",
"optimizers": "boolean",
"micro_inverter": "boolean",
"string_inputs": "integer",
"nominal_dc_voltage": "integer",
"start_voltage": "string (decimal)",
"self_consumption_night": "string (decimal)",
"min_voltage_in": "integer",
"max_voltage_in": "integer",
"max_power_in": "integer",
"max_current_in": "string (decimal)",
"mppt_min_voltage": "integer",
"mppt_max_voltage": "integer",
"undersizing": "string (decimal)",
"oversizing": "string (decimal)"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
Optimizers
GET /optimizers/{id}/
Return the details of an optimizer.
A unique integer value identifying this Optimizer.
Optimizer details
Unauthorized
Not Found
Response Example (200 OK)
{
"id": "integer",
"manufacturer": "string",
"model": "string",
"specsheet": "string (uri)",
"specsheet_language": "string",
"specsheet_date": "string (date)",
"is_verified": "boolean",
"is_archived": "boolean",
"efficiency": "string (decimal)",
"max_power_in": "integer",
"max_current_in": "string (decimal)",
"max_voltage_in": "integer",
"max_voltage_out": "integer",
"max_current_out": "string (decimal)",
"n_panels_in": "integer",
"n_mppts_in": "integer",
"mppt_min_voltage": "string (decimal)",
"mppt_max_voltage": "string (decimal)",
"min_string_length_1_phase": "integer",
"max_string_length_1_phase": "integer",
"min_string_length_3_phase": "integer",
"max_string_length_3_phase": "integer",
"min_compatible_1_phase_inverter": "integer",
"min_compatible_3_phase_inverter": "integer",
"special_case": "boolean",
"remarks": "string"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
Panels
GET /panels/{id}/
Return the details of a panel.
A unique integer value identifying this Panel.
Panel details
Unauthorized
Not Found
Response Example (200 OK)
{
"id": "integer",
"type": "string",
"colour": "string",
"length": "string",
"width": "string",
"watt_peak": "integer",
"manufacturer": "string",
"model": "string",
"optimizer_builtin": "boolean",
"specsheet": "string (uri)"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
Projects
GET /projects/
A page number within the paginated result set.
Number of results to return per page.
Projects list
Unauthorized
Response Example (200 OK)
[
{
"id": "integer",
"app_link": "string",
"first_name": "string",
"infix": "string",
"last_name": "string",
"street": "string",
"house_number": "string",
"postcode": "string",
"city": "string",
"country": "string",
"longitude": "string (decimal)",
"latitude": "string (decimal)",
"billing_address": "string",
"language": "string",
"is_b2b": "boolean",
"custom_fields": "string",
"email": "string (email)",
"comments": "string",
"created_at": "string",
"last_modified": "string",
"quotes_count": "integer",
"owner": "integer"
}
]
Response Headers (200 OK)
Link |
Provides information about the pagination. |
string |
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
X-Total-Count |
The total amount of results. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
POST /projects/
Create a project.
Project details
Request Example
{
"name": "string",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"network_phase": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string (email)"
}
Project created
Unauthorized
Response Example (201 Created)
{
"id": "integer"
}
Response Headers (201 Created)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
X-Total-Count |
The total amount of results. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
GET /projects/{id}/
Return details of a specific project, including information about its systems.
(no description)
Project details
Unauthorized
Not Found
Response Example (200 OK)
{
"quotes": [
{
"id": "integer",
"name": "string",
"type": "string",
"state": "string",
"app_link": "string"
}
],
"name": "string",
"id": "integer",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"comments": "string",
"kwh_price": "string",
"last_modified": "string",
"created_at": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string",
"app_link": "string",
"vat_tariff": "string (decimal)",
"network_phase": "string",
"online_offer_link": "string",
"expected_global_irradiance": "integer"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
PATCH /projects/{id}/
Project details
(no description)
Request Example
{
"name": "string",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"network_phase": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string (email)"
}
Update result
Unauthorized
Not Found
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
GET /projects/{integration}/
One of 'salesforce', 'zoho', 'pipedrive'.
A page number within the paginated result set.
Number of results to return per page.
(no description)
Projects list
Unauthorized
Response Example (200 OK)
[
{
"id": "integer",
"app_link": "string",
"first_name": "string",
"infix": "string",
"last_name": "string",
"street": "string",
"house_number": "string",
"postcode": "string",
"city": "string",
"country": "string",
"longitude": "string (decimal)",
"latitude": "string (decimal)",
"billing_address": "string",
"language": "string",
"is_b2b": "boolean",
"custom_fields": "string",
"email": "string (email)",
"comments": "string",
"created_at": "string",
"last_modified": "string",
"quotes_count": "integer",
"owner": "integer"
}
]
Response Headers (200 OK)
Link |
Provides information about the pagination. |
string |
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
X-Total-Count |
The total amount of results. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
POST /projects/{integration}/
Create a project.
Project details
One of 'salesforce', 'zoho', 'pipedrive'.
(no description)
Request Example
{
"name": "string",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"network_phase": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string (email)",
"external_id": "string"
}
Project created
Unauthorized
Response Example (201 Created)
{
"id": "integer"
}
Response Headers (201 Created)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
X-Total-Count |
The total amount of results. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
GET /projects/{integration}/{external_id}/
Return details of a specific project, including information about its systems.
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Project details
Unauthorized
Not Found
Response Example (200 OK)
{
"name": "string",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"network_phase": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string (email)",
"external_id": "string"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
PATCH /projects/{integration}/{external_id}/
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Update result
Unauthorized
Not Found
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
Quotes
POST /quotes/
Quote
Request Example
{
"name": "string",
"project_id": "integer",
"copy_from": "integer",
"type": "string"
}
Quote created.
Unauthorized
Response Example (201 Created)
{
"name": "string",
"project_id": "integer",
"copy_from": "integer",
"type": "string",
"id": "integer"
}
Response Example (401 Unauthorized)
{
"detail": "string"
}
GET /quotes/{id}/
(no description)
Quote details
Unauthorized
Not Found
Response Example (200 OK)
{
"id": "integer",
"name": "string",
"name_suffix": "string",
"project_id": "integer",
"remarks": "string",
"type": "string",
"system_design": {
"total_watt_peak": "integer",
"panel_count": "string",
"string_configuration": [
{
"inverter_id": "integer",
"inverter_sku": "string",
"connected_panel_count": "integer"
}
],
"yields": {
"yield_year1": "number",
"yields_per_month": "string"
},
"gutter_height": "number",
"design_image_url": "string",
"elevation_image_url": "string",
"obstacle_image_url": "string",
"ballast_image_url": "string",
"grids": [
{
"panel_count": "integer",
"panel_id": "integer",
"inclination": "number",
"orientation": "number",
"panel_configuration": "object",
"row_orientations": "object",
"spacing": "number",
"portrait": "boolean",
"mounting_brand": "string"
}
],
"inverters": [
{
"id": "integer",
"sku": "string",
"panels_in_strings": [
"integer"
]
}
]
},
"pdfs": [
{
"generated_at": "string",
"url": "string"
}
],
"financials": {
"markup_percentage": "number",
"subtotal_before_discount": "number",
"loan": {
"amount": "number",
"duration": "number",
"interest_rate": "number"
},
"discount": [
{
"type": "string",
"description": "string",
"value": "number"
}
],
"total_ex_vat": "number",
"vat": "number",
"vat_tariff": "number",
"total": "number",
"deposits": [
{
"amount": "number",
"percentage": "number"
}
],
"payback_time": "number",
"irr": "number",
"total_cashflow_after_25_years": "number"
},
"state": "string",
"package": {
"id": "integer",
"name": "string",
"description": "string",
"price": "number",
"panel_id": "integer",
"panel_count": "integer",
"inverter_id": "integer",
"optimizer_id": "integer",
"sku": "string"
},
"simple": "boolean",
"bill_of_materials": [
{
"id": "number",
"count": "number",
"name": "string",
"names": {
"nl": "string",
"fr": "string",
"en": "string",
"es": "string"
},
"description": {
"nl": "string",
"fr": "string",
"en": "string",
"es": "string"
},
"type": "string",
"price": "number",
"sku": "string"
}
],
"created_at": "string",
"last_updated": "string",
"accepted_by": "string",
"accepted_time": "string (date-time)",
"expiration_date": "string (date-time)",
"superseded_by": "integer"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
PATCH /quotes/{id}/
Quote
(no description)
Request Example
{
"name": "string",
"name_suffix": "string",
"remarks": "string",
"state": "string"
}
Quote updated
Bad data
Unauthorized
Response Example (200 OK)
{
"name": "string",
"name_suffix": "string",
"remarks": "string",
"state": "string"
}
Response Example (400 Bad Request)
{
"detail": "string"
}
Response Example (401 Unauthorized)
{
"detail": "string"
}
GET /quotes/{id}/systemdesign/ballast_image/
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
GET /quotes/{id}/systemdesign/design_image/
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
GET /quotes/{id}/systemdesign/elevation_image/
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
GET /quotes/{id}/systemdesign/obstacle_image/
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
POST /quotes/{integration}/
Quote
One of 'salesforce', 'zoho', 'pipedrive'.
(no description)
Request Example
{
"name": "string",
"project_id": "integer",
"copy_from": "integer",
"type": "string",
"external_id": "string"
}
Quote created.
Unauthorized
Response Example (201 Created)
{
"name": "string",
"project_id": "integer",
"copy_from": "integer",
"type": "string",
"id": "integer"
}
Response Example (401 Unauthorized)
{
"detail": "string"
}
GET /quotes/{integration}/{external_id}/
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Quote details
Unauthorized
Not Found
Response Example (200 OK)
{
"id": "integer",
"name": "string",
"name_suffix": "string",
"project_id": "integer",
"remarks": "string",
"type": "string",
"system_design": {
"total_watt_peak": "integer",
"panel_count": "string",
"string_configuration": [
{
"inverter_id": "integer",
"inverter_sku": "string",
"connected_panel_count": "integer"
}
],
"yields": {
"yield_year1": "number",
"yields_per_month": "string"
},
"gutter_height": "number",
"design_image_url": "string",
"elevation_image_url": "string",
"obstacle_image_url": "string",
"ballast_image_url": "string",
"grids": [
{
"panel_count": "integer",
"panel_id": "integer",
"inclination": "number",
"orientation": "number",
"panel_configuration": "object",
"row_orientations": "object",
"spacing": "number",
"portrait": "boolean",
"mounting_brand": "string"
}
],
"inverters": [
{
"id": "integer",
"sku": "string",
"panels_in_strings": [
"integer"
]
}
]
},
"pdfs": [
{
"generated_at": "string",
"url": "string"
}
],
"financials": {
"markup_percentage": "number",
"subtotal_before_discount": "number",
"loan": {
"amount": "number",
"duration": "number",
"interest_rate": "number"
},
"discount": [
{
"type": "string",
"description": "string",
"value": "number"
}
],
"total_ex_vat": "number",
"vat": "number",
"vat_tariff": "number",
"total": "number",
"deposits": [
{
"amount": "number",
"percentage": "number"
}
],
"payback_time": "number",
"irr": "number",
"total_cashflow_after_25_years": "number"
},
"state": "string",
"package": {
"id": "integer",
"name": "string",
"description": "string",
"price": "number",
"panel_id": "integer",
"panel_count": "integer",
"inverter_id": "integer",
"optimizer_id": "integer",
"sku": "string"
},
"simple": "boolean",
"bill_of_materials": [
{
"id": "number",
"count": "number",
"name": "string",
"names": {
"nl": "string",
"fr": "string",
"en": "string",
"es": "string"
},
"description": {
"nl": "string",
"fr": "string",
"en": "string",
"es": "string"
},
"type": "string",
"price": "number",
"sku": "string"
}
],
"created_at": "string",
"last_updated": "string",
"accepted_by": "string",
"accepted_time": "string (date-time)",
"expiration_date": "string (date-time)",
"superseded_by": "integer"
}
Response Headers (200 OK)
X-Rate-Limit-Limit |
The number of allowed requests. |
integer |
Response Example (401 Unauthorized)
{
"detail": "string"
}
Response Example (404 Not Found)
{
"detail": "string"
}
PATCH /quotes/{integration}/{external_id}/
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Request Example
{
"name": "string",
"name_suffix": "string",
"remarks": "string",
"state": "string",
"external_id": "string"
}
Quote updated
Bad data
Unauthorized
Response Example (200 OK)
{
"name": "string",
"name_suffix": "string",
"remarks": "string",
"state": "string"
}
Response Example (400 Bad Request)
{
"detail": "string"
}
Response Example (401 Unauthorized)
{
"detail": "string"
}
GET /quotes/{integration}/{external_id}/systemdesign/ballast_image/
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
GET /quotes/{integration}/{external_id}/systemdesign/design_image/
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
GET /quotes/{integration}/{external_id}/systemdesign/elevation_image/
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
GET /quotes/{integration}/{external_id}/systemdesign/obstacle_image/
One of 'salesforce', 'zoho', 'pipedrive'.
Id at integration
(no description)
(no description)
Response Example (200 OK)
{
"status": "string",
"result": "string"
}
Schema Definitions
Address: object
Please provide 'postcode' + 'housenumber' or 'city' + 'street' + 'housenumber'.
- country: string (2 chars)
-
2 letter ISO 3166-1 alpha-2 country code
- administrative_area_level_1: string | null (1 to 3 chars)
-
Optional region for Belgium. One of 'VLG', 'WAL', 'BRU'
- city: string (at least 1 chars)
-
City
- street: string | null
-
Street
- postcode: string | null
-
Postal Code
- housenumber: string | null
-
House Number
Example
{
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
}
Battery: object
- id: integer
- manufacturer: string (up to 50 chars)
- model: string (up to 50 chars)
- usable_energy_kwh: number
Example
{
"id": "integer",
"manufacturer": "string",
"model": "string",
"usable_energy_kwh": "number"
}
CatalogueElement: object
- id: integer
- sku: string (at least 1 chars)
- enabled: boolean
- element_type: string (at least 1 chars)
- element_id: integer | null
- element_url: string | null (uri) (at least 1 chars)
- names: object
- descriptions: object
- price: string (decimal)
Example
{
"id": "integer",
"sku": "string",
"enabled": "boolean",
"element_type": "string",
"element_id": "integer",
"element_url": "string (uri)",
"names": "object",
"descriptions": "object",
"price": "string (decimal)"
}
CataloguePackage: object
- id: integer
- name: string (at least 1 chars)
- panel_count: integer
- price: string (decimal)
- panel_id: integer
- sku: string
- descriptions: object
- panel_url: string
- inverter_id: integer | null
- inverter_url: string
- optimizer_id: integer | null
- optimizer_url: string
Example
{
"id": "integer",
"name": "string",
"panel_count": "integer",
"price": "string (decimal)",
"panel_id": "integer",
"sku": "string",
"descriptions": "object",
"panel_url": "string",
"inverter_id": "integer",
"inverter_url": "string",
"optimizer_id": "integer",
"optimizer_url": "string"
}
Delayed Result: object
- status: string
-
One of PENDING, RECEIVED, STARTED, SUCCESS, REVOKED, FAILURE, RETRY. Where the last three are failure states, and the first three denote the task isn't done yet.
- result: string
-
When status == SUCCESS, this is your result. In case of one of the failure states, it's the error message.
Example
{
"status": "string",
"result": "string"
}
Inverter: object
- id: integer
- model: string
- manufacturer: string (up to 50 chars)
- specsheet: string | null (uri)
- sort_key: string (up to 25 chars)
- efficiency: string (decimal)
-
Euro efficiency
- remarks: string
- watt_peak: integer 0 ≤ x ≤ 4294967295
-
rated AC power
- optimizers: boolean
-
e.g. SolarEdge
- micro_inverter: boolean
- string_inputs: integer 0 ≤ x ≤ 65535
-
DC inputs with MPP trackers
- nominal_dc_voltage: integer 0 ≤ x ≤ 65535
- start_voltage: string (decimal)
-
DC start voltage
- self_consumption_night: string (decimal)
- min_voltage_in: integer 0 ≤ x ≤ 65535
-
DC voltage range
- max_voltage_in: integer 0 ≤ x ≤ 65535
-
DC voltage range
- max_power_in: integer 0 ≤ x ≤ 4294967295
-
DC power max
- max_current_in: string (decimal)
-
Max DC current
- mppt_min_voltage: integer 0 ≤ x ≤ 65535
-
MPP voltage range
- mppt_max_voltage: integer 0 ≤ x ≤ 65535
-
MPP voltage range
- undersizing: string (decimal)
-
Min inverter Wp / total panel Wp
- oversizing: string (decimal)
-
Max inverter Wp / total panel Wp
Example
{
"id": "integer",
"model": "string",
"manufacturer": "string",
"specsheet": "string (uri)",
"sort_key": "string",
"efficiency": "string (decimal)",
"remarks": "string",
"watt_peak": "integer",
"optimizers": "boolean",
"micro_inverter": "boolean",
"string_inputs": "integer",
"nominal_dc_voltage": "integer",
"start_voltage": "string (decimal)",
"self_consumption_night": "string (decimal)",
"min_voltage_in": "integer",
"max_voltage_in": "integer",
"max_power_in": "integer",
"max_current_in": "string (decimal)",
"mppt_min_voltage": "integer",
"mppt_max_voltage": "integer",
"undersizing": "string (decimal)",
"oversizing": "string (decimal)"
}
Optimizers: object
- id: integer
- manufacturer: string (up to 50 chars)
- model: string (up to 50 chars)
- specsheet: string | null (uri)
- specsheet_language: string | null nl, en, es, fr, de
- specsheet_date: string | null (date)
- is_verified: boolean
- is_archived: boolean
- efficiency: string | null (decimal)
-
Weighted/euro efficiency
- max_power_in: integer 0 ≤ x ≤ 65535
-
Rated DC input power
- max_current_in: string (decimal)
-
Max continuous current in (Isc)
- max_voltage_in: integer 0 ≤ x ≤ 65535
-
Absolute max input voltage (Voc @ min temp)
- max_voltage_out: integer 0 ≤ x ≤ 65535
- max_current_out: string (decimal)
- n_panels_in: integer 0 ≤ x ≤ 65535
-
Number of panels in series per mmpt input
- n_mppts_in: integer | null 0 ≤ x ≤ 65535
-
Number of inputs. MPPTs
- mppt_min_voltage: string | null (decimal)
-
MPPT operating voltage range
- mppt_max_voltage: string | null (decimal)
-
MPPT operating voltage range
- min_string_length_1_phase: integer | null 0 ≤ x ≤ 65535
-
Number of optimizers.
- max_string_length_1_phase: integer | null 0 ≤ x ≤ 65535
-
Number of optimizers
- min_string_length_3_phase: integer | null 0 ≤ x ≤ 65535
-
Number of optimizers. Ignore 277/480 those are for Americans.
- max_string_length_3_phase: integer | null 0 ≤ x ≤ 65535
-
Number of optimizers. Ignore 277/480 those are for Americans.
- min_compatible_1_phase_inverter: integer | null 0 ≤ x ≤ 65535
-
The power in W. If compatible with all use 0. If not compatible leave blank.
- min_compatible_3_phase_inverter: integer | null 0 ≤ x ≤ 65535
-
The power in W. If compatible with all use 0. If not compatible leave blank.
- special_case: boolean | null
-
Is there any unique logic or rules that are different.If not sure mark as true.
- remarks: string | null
Example
{
"id": "integer",
"manufacturer": "string",
"model": "string",
"specsheet": "string (uri)",
"specsheet_language": "string",
"specsheet_date": "string (date)",
"is_verified": "boolean",
"is_archived": "boolean",
"efficiency": "string (decimal)",
"max_power_in": "integer",
"max_current_in": "string (decimal)",
"max_voltage_in": "integer",
"max_voltage_out": "integer",
"max_current_out": "string (decimal)",
"n_panels_in": "integer",
"n_mppts_in": "integer",
"mppt_min_voltage": "string (decimal)",
"mppt_max_voltage": "string (decimal)",
"min_string_length_1_phase": "integer",
"max_string_length_1_phase": "integer",
"min_string_length_3_phase": "integer",
"max_string_length_3_phase": "integer",
"min_compatible_1_phase_inverter": "integer",
"min_compatible_3_phase_inverter": "integer",
"special_case": "boolean",
"remarks": "string"
}
Panel: object
- id: integer
- type: string mono, poly, thin_film
- colour: string blue, black
- length: string
- width: string
- watt_peak: integer 0 ≤ x ≤ 65535
- manufacturer: string (up to 50 chars)
- model: string
- optimizer_builtin: boolean
- specsheet: string | null (uri)
Example
{
"id": "integer",
"type": "string",
"colour": "string",
"length": "string",
"width": "string",
"watt_peak": "integer",
"manufacturer": "string",
"model": "string",
"optimizer_builtin": "boolean",
"specsheet": "string (uri)"
}
Project Item: object
- id: integer
- app_link: string
- first_name: string (at least 1 chars)
- infix: string (at least 1 chars)
- last_name: string (at least 1 chars)
- street: string (at least 1 chars)
- house_number: string (at least 1 chars)
- postcode: string | null (up to 10 chars)
- city: string (at least 1 chars)
- country: string BE, DE, LU, ES, NL, GB, FR, IT, AT
- longitude: string | null (decimal)
- latitude: string | null (decimal)
- billing_address: string | null
- language: string | null nl, en, es, fr, de
- is_b2b: boolean
- custom_fields: string | null
- email: string (email) (up to 256 chars)
- comments: string (at least 1 chars)
- created_at: string (at least 1 chars)
- last_modified: string (at least 1 chars)
- quotes_count: integer
- owner: integer | null
Example
{
"id": "integer",
"app_link": "string",
"first_name": "string",
"infix": "string",
"last_name": "string",
"street": "string",
"house_number": "string",
"postcode": "string",
"city": "string",
"country": "string",
"longitude": "string (decimal)",
"latitude": "string (decimal)",
"billing_address": "string",
"language": "string",
"is_b2b": "boolean",
"custom_fields": "string",
"email": "string (email)",
"comments": "string",
"created_at": "string",
"last_modified": "string",
"quotes_count": "integer",
"owner": "integer"
}
Contact Details: object
- first_name: string (up to 100 chars)
- insertion: string (up to 10 chars)
- last_name: string (up to 100 chars)
- email: string (email) (up to 256 chars)
- phone: string (up to 20 chars)
Example
{
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
}
Project: object
- name: string (up to 255 chars)
- contact: Contact Details
- address: Address
- billing_address: string (up to 255 chars)
- custom_fields: object | null [object Object]
-
JSON data mapping.
E.g: {"company_name": "Acme bv", "company_nr": 123456}
- is_b2b: boolean | null false
- language: string | null (2 chars)
- network_phase: string | null (1 to 3 chars)
- annual_power_consumption_kwh: integer | null
- owner: string (email) (up to 256 chars)
Example
{
"name": "string",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"network_phase": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string (email)"
}
Quote Item: object
- id: integer
- name: string (at least 1 chars)
- type: string
- state: string (at least 1 chars)
- app_link: string
Example
{
"id": "integer",
"name": "string",
"type": "string",
"state": "string",
"app_link": "string"
}
Project Detail: object
- quotes: Quote Item
-
Quote Item - name: string (1 to 255 chars)
- id: integer
- contact: Contact Details
- address: Address
- billing_address: string (at least 1 chars)
- comments: string (at least 1 chars)
- kwh_price: string (at least 1 chars)
- last_modified: string (at least 1 chars)
- created_at: string (at least 1 chars)
- custom_fields: object
-
JSON data mapping.
E.g: {"company_name": "Acme bv", "company_nr": 123456}
- is_b2b: boolean | null false
- language: string | null (2 chars)
- annual_power_consumption_kwh: integer
- owner: string
- app_link: string
- vat_tariff: string (decimal)
- network_phase: string | null (2 to 3 chars)
- online_offer_link: string | null (at least 1 chars)
- expected_global_irradiance: integer | null
Example
{
"quotes": [
{
"id": "integer",
"name": "string",
"type": "string",
"state": "string",
"app_link": "string"
}
],
"name": "string",
"id": "integer",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"comments": "string",
"kwh_price": "string",
"last_modified": "string",
"created_at": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string",
"app_link": "string",
"vat_tariff": "string (decimal)",
"network_phase": "string",
"online_offer_link": "string",
"expected_global_irradiance": "integer"
}
Project with integration: object
- name: string (up to 255 chars)
- contact: Contact Details
- address: Address
- billing_address: string (up to 255 chars)
- custom_fields: object | null [object Object]
-
JSON data mapping.
E.g: {"company_name": "Acme bv", "company_nr": 123456}
- is_b2b: boolean | null false
- language: string | null (2 chars)
- network_phase: string | null (1 to 3 chars)
- annual_power_consumption_kwh: integer | null
- owner: string (email) (up to 256 chars)
- external_id: string (1 to 255 chars)
Example
{
"name": "string",
"contact": {
"first_name": "string",
"insertion": "string",
"last_name": "string",
"email": "string (email)",
"phone": "string"
},
"address": {
"country": "string",
"administrative_area_level_1": "string",
"city": "string",
"street": "string",
"postcode": "string",
"housenumber": "string"
},
"billing_address": "string",
"custom_fields": "object",
"is_b2b": "boolean",
"language": "string",
"network_phase": "string",
"annual_power_consumption_kwh": "integer",
"owner": "string (email)",
"external_id": "string"
}
Minimal quote details: object
- name: string (1 to 255 chars)
- project_id: integer
- copy_from: integer
- type: string (1 to 10 chars)
- id: integer
Example
{
"name": "string",
"project_id": "integer",
"copy_from": "integer",
"type": "string",
"id": "integer"
}
String Configuration: object
- inverter_id: integer
- inverter_sku: string (at least 1 chars)
- connected_panel_count: integer
Example
{
"inverter_id": "integer",
"inverter_sku": "string",
"connected_panel_count": "integer"
}
Yields: object
- yield_year1: number
- yields_per_month: string
Example
{
"yield_year1": "number",
"yields_per_month": "string"
}
GridSerializerExternal: object
- panel_count: integer
- panel_id: integer
- inclination: number
- orientation: number
- panel_configuration: object
- row_orientations: object
- spacing: number
-
Gap between panel rows, in cm. In the case of east-west, it's the gap between 2 row combinations. When mounting is selected for this grid, then spacing will always be 0.
- portrait: boolean
- mounting_brand: string | null (at least 1 chars)
Example
{
"panel_count": "integer",
"panel_id": "integer",
"inclination": "number",
"orientation": "number",
"panel_configuration": "object",
"row_orientations": "object",
"spacing": "number",
"portrait": "boolean",
"mounting_brand": "string"
}
InverterSerializerExternal: object
- id: integer
- sku: string (at least 1 chars)
- panels_in_strings: integer[]
-
integer
Example
{
"id": "integer",
"sku": "string",
"panels_in_strings": [
"integer"
]
}
System Design: object
- total_watt_peak: integer
- panel_count: string
- string_configuration: String Configuration
-
String Configuration - yields: Yields
- gutter_height: number
- design_image_url: string
- elevation_image_url: string
- obstacle_image_url: string
- ballast_image_url: string
- grids: GridSerializerExternal
-
GridSerializerExternal - inverters: InverterSerializerExternal
-
InverterSerializerExternal
Example
{
"total_watt_peak": "integer",
"panel_count": "string",
"string_configuration": [
{
"inverter_id": "integer",
"inverter_sku": "string",
"connected_panel_count": "integer"
}
],
"yields": {
"yield_year1": "number",
"yields_per_month": "string"
},
"gutter_height": "number",
"design_image_url": "string",
"elevation_image_url": "string",
"obstacle_image_url": "string",
"ballast_image_url": "string",
"grids": [
{
"panel_count": "integer",
"panel_id": "integer",
"inclination": "number",
"orientation": "number",
"panel_configuration": "object",
"row_orientations": "object",
"spacing": "number",
"portrait": "boolean",
"mounting_brand": "string"
}
],
"inverters": [
{
"id": "integer",
"sku": "string",
"panels_in_strings": [
"integer"
]
}
]
}
Generated Report: object
- generated_at: string
- url: string
Example
{
"generated_at": "string",
"url": "string"
}
PackageSerializerExternal: object
- id: integer
- name: string (at least 1 chars)
- description: string
- price: number
- panel_id: integer
- panel_count: integer
- inverter_id: integer
- optimizer_id: integer
- sku: string (at least 1 chars)
Example
{
"id": "integer",
"name": "string",
"description": "string",
"price": "number",
"panel_id": "integer",
"panel_count": "integer",
"inverter_id": "integer",
"optimizer_id": "integer",
"sku": "string"
}
Quote Detail: object
- id: integer
- name: string (at least 1 chars)
- name_suffix: string (at least 1 chars)
- project_id: integer
- remarks: string (at least 1 chars)
- type: string
- system_design: System Design
- pdfs: Generated Report
-
Generated Report - financials: object
-
- markup_percentage: number
- subtotal_before_discount: number
- loan: object
-
- amount: number
- duration: number
- interest_rate: number
- discount: object[]
-
object - type: string
- description: string
- value: number
- total_ex_vat: number
- vat: number
- vat_tariff: number
- total: number
- deposits: object[]
-
object - amount: number
- percentage: number
- payback_time: number
- irr: number
- total_cashflow_after_25_years: number
string | null - state: string
- package: PackageSerializerExternal
- simple: boolean false
- bill_of_materials: object[]
-
object - id: number
- count: number
- name: string
- names: object
-
- nl: string
- fr: string
- en: string
- es: string
- description: object
-
- nl: string
- fr: string
- en: string
- es: string
- type: string panel, inverter, optimizer, custom
- price: number
- sku: string
- created_at: string (at least 1 chars)
- last_updated: string (at least 1 chars)
- accepted_by: string (at least 1 chars)
- accepted_time: string (date-time)
- expiration_date: string (date-time)
- superseded_by: integer
Example
{
"id": "integer",
"name": "string",
"name_suffix": "string",
"project_id": "integer",
"remarks": "string",
"type": "string",
"system_design": {
"total_watt_peak": "integer",
"panel_count": "string",
"string_configuration": [
{
"inverter_id": "integer",
"inverter_sku": "string",
"connected_panel_count": "integer"
}
],
"yields": {
"yield_year1": "number",
"yields_per_month": "string"
},
"gutter_height": "number",
"design_image_url": "string",
"elevation_image_url": "string",
"obstacle_image_url": "string",
"ballast_image_url": "string",
"grids": [
{
"panel_count": "integer",
"panel_id": "integer",
"inclination": "number",
"orientation": "number",
"panel_configuration": "object",
"row_orientations": "object",
"spacing": "number",
"portrait": "boolean",
"mounting_brand": "string"
}
],
"inverters": [
{
"id": "integer",
"sku": "string",
"panels_in_strings": [
"integer"
]
}
]
},
"pdfs": [
{
"generated_at": "string",
"url": "string"
}
],
"financials": {
"markup_percentage": "number",
"subtotal_before_discount": "number",
"loan": {
"amount": "number",
"duration": "number",
"interest_rate": "number"
},
"discount": [
{
"type": "string",
"description": "string",
"value": "number"
}
],
"total_ex_vat": "number",
"vat": "number",
"vat_tariff": "number",
"total": "number",
"deposits": [
{
"amount": "number",
"percentage": "number"
}
],
"payback_time": "number",
"irr": "number",
"total_cashflow_after_25_years": "number"
},
"state": "string",
"package": {
"id": "integer",
"name": "string",
"description": "string",
"price": "number",
"panel_id": "integer",
"panel_count": "integer",
"inverter_id": "integer",
"optimizer_id": "integer",
"sku": "string"
},
"simple": "boolean",
"bill_of_materials": [
{
"id": "number",
"count": "number",
"name": "string",
"names": {
"nl": "string",
"fr": "string",
"en": "string",
"es": "string"
},
"description": {
"nl": "string",
"fr": "string",
"en": "string",
"es": "string"
},
"type": "string",
"price": "number",
"sku": "string"
}
],
"created_at": "string",
"last_updated": "string",
"accepted_by": "string",
"accepted_time": "string (date-time)",
"expiration_date": "string (date-time)",
"superseded_by": "integer"
}
Quote Update: object
- name: string (at least 1 chars)
- name_suffix: string (at least 1 chars)
- remarks: string (at least 1 chars)
- state: string (at least 1 chars)
Example
{
"name": "string",
"name_suffix": "string",
"remarks": "string",
"state": "string"
}
Quote with integration: object
- name: string (1 to 255 chars)
- project_id: integer
- copy_from: integer
- type: string (1 to 10 chars)
- id: integer
- external_id: string (at least 1 chars)
Example
{
"name": "string",
"project_id": "integer",
"copy_from": "integer",
"type": "string",
"id": "integer",
"external_id": "string"
}
Quote Update with integration: object
- name: string (at least 1 chars)
- name_suffix: string (at least 1 chars)
- remarks: string (at least 1 chars)
- state: string (at least 1 chars)
- external_id: string (at least 1 chars)
Example
{
"name": "string",
"name_suffix": "string",
"remarks": "string",
"state": "string",
"external_id": "string"
}