Get a Project's Sold System, and soldSystem on project.created (2026-11-01)
A new endpoint returns the solar system a project was sold with.
Org API, Get a Project's Sold System (GET /api/v1/projects/{id}/system): new. It returns the solar system a project was sold with, as it stood when the accepted quote became the project. Later quote changes never alter it. The response holds the system type (PV, PV_STORAGE, or STORAGE_ONLY), totals, arrays, inverters, batteries, storage and backup, production, usage, utility rates, savings, price, financing, the payment schedule, and display.summarySentence, a one-sentence description of the system. It adds agreement.contractId once the agreement is signed.
The call needs the projects:read scope. Price, financing, and payments are null unless the key also has quotes:content:read, and moneyWithheld says which. A project that wasn't sold from a solar quote returns 404 with NOT_FOUND.
Webhook, project.created: for a project created from a solar quote, the payload adds soldSystem with scope, totals, and summarySentence. Other project.created payloads are unchanged.
Send Quote holds a solar quote for three more reasons (2026-11-01)
A solar quote with too many expansion batteries, a blank agreement value, or estimated production returns 409 CONFLICT.
Project scopes show the sale's money only with quotes:content:read (2026-11-01)
Four Project endpoints leave out the sale's money for a key without quotes:content:read.