Record external or staff-mediated Quote acceptance
A service quote on a prepaid plan with no provider funding entered returns 409 CONFLICT with reason PREPAID_FUNDING_MISSING; acceptance does not occur. Hourly quotes return 400 VALIDATION_FAILED for invalid hourly terms, financing, discounts exceeding fixed items, or legacy sourceProjectId add-work-order links; acceptance does not occur. Hourly quotes use quote acceptance instead of installer agreement signing: ON_SIGNING project creation becomes ON_ACCEPTANCE, and MANUAL stays manual. Records acceptance with a required method plus optional accepter identity, notes, and downstream Project/Work Order External References. acceptedAt, acceptedBy, and source are not accepted. When the plan a solar Quote's proposal presents is a PPA or lease, the provider sends its own agreement, so a Project that would wait for the company's signed agreement starts on acceptance instead.
A service quote on a prepaid plan with no provider funding entered returns 409 CONFLICT with reason PREPAID_FUNDING_MISSING; acceptance does not occur. Hourly quotes return 400 VALIDATION_FAILED for invalid hourly terms, financing, discounts exceeding fixed items, or legacy sourceProjectId add-work-order links; acceptance does not occur. Hourly quotes use quote acceptance instead of installer agreement signing: ON_SIGNING project creation becomes ON_ACCEPTANCE, and MANUAL stays manual. Records acceptance with a required method plus optional accepter identity, notes, and downstream Project/Work Order External References. acceptedAt, acceptedBy, and source are not accepted. When the plan a solar Quote's proposal presents is a PPA or lease, the provider sends its own agreement, so a Project that would wait for the company's signed agreement starts on acceptance instead.
Record external or staff-mediated Quote acceptance. Use an organization API key with quotes:accept. Check the response envelope and meta.requestId before triggering dependent workflow steps.
Required scopes
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | Quote identifier returned by the Organization API. |
Request body
| Field | Type | Description |
|---|---|---|
| methodrequired | VERBAL | EMAIL | IN_APP | SIGNATURE | Optional unless marked required. |
| acceptedByName | string | null | Optional unless marked required. |
| acceptedByEmail | string | null | Optional unless marked required. |
| notes | string | null | Optional unless marked required. |
| externalReferences | object | Optional unless marked required. |
| externalReferences.project[] | array<object> | Optional unless marked required. |
| externalReferences.project[].externalSystemrequired | string | Optional unless marked required. |
| externalReferences.project[].externalObjectrequired | string | Optional unless marked required. |
| externalReferences.project[].externalIdrequired | string | Optional unless marked required. |
| externalReferences.project[].metadata | object | Optional unless marked required. |
| externalReferences.workOrder[] | array<object> | Optional unless marked required. |
| externalReferences.workOrder[].externalSystemrequired | string | Optional unless marked required. |
| externalReferences.workOrder[].externalObjectrequired | string | Optional unless marked required. |
| externalReferences.workOrder[].externalIdrequired | string | Optional unless marked required. |
| externalReferences.workOrder[].metadata | object | Optional unless marked required. |
{
"method": "SIGNATURE",
"acceptedByName": "Ada Lovelace",
"acceptedByEmail": "ada@example.com"
}Responses
Quote acceptance action envelope
#/components/schemas/OrgApiActionEnvelope
Missing or invalid organization API key
#/components/schemas/OrgApiError
Organization billing access or an endpoint-specific business quota denied the request
#/components/schemas/OrgApiError
Missing required scope: quotes:accept
#/components/schemas/OrgApiError
Rate limit exceeded
#/components/schemas/OrgApiError
Errors
Static examples
curl -X POST "$SOLAROS_BASE_URL/api/v1/quotes/$SOLAROS_QUOTE/mark-accepted" \
-H "Authorization: Bearer $SOLAROS_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SOLAROS_IDEMPOTENCY_KEY" \
--data '{"method":"SIGNATURE","acceptedByName":"Ada Lovelace","acceptedByEmail":"ada@example.com"}'