GraphQL API

GraphQL API

https://graphql.org/learn/

GraphQL offers a powerful way to integrate many aspects of SolarPlus and build your custom integrations with any platform.

Setting up GraphQL access via IDE

If creating an integration via IDE you can set up a config file to manage access and add your User API token generated in SolarPlus under 'Integrations'.

 

{ "name": "SolaPlus Live", "schemaPath": "schema.graphql", "extensions": { "endpoints": { "Default GraphQL Endpoint": { "url": "https://go.solarplus.co/graphql", "headers": { "user-agent": "JS GraphQL", "authorization": "Bearer ~add-token-here~" }, "introspect": false } } } }

 

Query the API

 

Create your query file

 

query Inventory($id: ID!) { Inventory(id: $id) { id name created } }

 

Add argument variables, eg. ID
{ "id": 181043 }

 

Result:

{ "data": { "System": { "id": "181043", "name": "9.6 kW Primo Telsa", "created": "2021-06-25 04:34:14" } }

 

Querying the API via browser

Go to https://go.solarplus.co/graphql while logged into the app in another tab

Open the schema panel on the right to review the schema structure .

Query as per instructions on the left hand panel:

 

{ Inventory(id: 87381 ) { id name InventoryPricings { id item_variation_suffix unitPrice } } }

 

Sample JSON result:

{ "data": { "Inventory": { "id": "87381", "name": "Clenergy ezRack Mounting 40mm Tin", "InventoryPricings": [ { "id": "77899", "item_variation_suffix": "Bracket Tin PV-ezRack", "unitPrice": "$2.43" }, { "id": "77900", "item_variation_suffix": "Isolator Shade, 280*158*114mm", "unitPrice": "$8.80" }, { "id": "77901", "item_variation_suffix": "Cable Clip for 2 cables", "unitPrice": "$0.30" }, { "id": "77902", "item_variation_suffix": "PV-ezRack End Clamp - 40mm", "unitPrice": "$0.80" }, { "id": "77903", "item_variation_suffix": "PV-ezRack Inter Clamp - 40mm", "unitPrice": "$2.00" }, { "id": "77904", "item_variation_suffix": "Clamp Grounding PV-ezRack", "unitPrice": "$0.34" }, { "id": "77905", "item_variation_suffix": "Eco Rail, 4200mm", "unitPrice": "$24.35" }, { "id": "77906", "item_variation_suffix": "Splice for ECO-Rail", "unitPrice": "$1.80" } ] } } }

 

GraphQL Common Applications

 

Inventory API to update pricebook

See Inventory API Documentation

 

Quote Pricing Update via GraphQL

This endpoint allows you to set the overall price for a quote with aline item price override.

 

Mutation: updateQuoteOptions

where:
id = system_id (ID) this is the SolarPlus system or quote ID
quote_use_price = Apply custom price (boolean)
quote_price = override price (DEC, 2)
quote_price_location: (INT)
 0  = retail ex gst
 1 = retail inc gst
 2 = final price

 

 

mutation updateQuoteOptions($input: UpdateSystemInput, $id: ID) { updateSystem(input: $input, id: $id) { id quote_use_price quote_status quote_price quote_price_location __typename } }

 

Variables passed:

{ "id": "316419", "input": { "quote_use_price": true, "quote_price": "7500.00", "quote_price_location": 2 } }

 

Getting Site information of a Quote via GraphQL

This allows you to get the site information of a particular system

query System($id: ID!) { System(id: $id) { id Site{ id full_address lat lng } } }

Variables passed: (id = system ID)

{ "id": 535913 }

Sample JSON result:

{ "data": { "System": { "id": "535913", "Site": { "id": "671753", "full_address": "448 Epsom Road, Flemington VIC, Australia", "lat": -27.58762108535, "lng": 152.72160961891 } } } }

Updating Quote Site Address via GraphQL

This endpoint allows you to set the site address of a particular system/quote without updating the Contact address.

Mutation: updateSiteAddress

where:

  • id = site ID

  • full_address = site address

  • lat = site latitude

  • lng = site longitude

Note: To get latitude and longitude: Go to https://www.google.com/maps , copy the address and get the latitude and longitude values

mutation updateSiteAddress ($id: ID!, $input:UpdateSiteInput!){ updateSite(id:$id,input:$input){ id } }

Variables passed:

{ "id": 671753, "input":{ "full_address": "Kyoto Street, Brassall QLD, Australia" "lat":"-27.5874928", "lng":"152.7187754" } }

 

Loading a system package to an existing quote

This allows you to load a system package to an existing system record.

Mutation: loadSystemPackage

mutation loadSystemPackage($systemId: ID!, $packageId: ID!) { loadSystemPackage( systemId: $systemId packageId: $packageId ) { id name } }

Variables passed:

{ "systemId": "542500", "packageId": "61668" }