Create or link a Property
Creates a Property for the Customer, or links that Customer's own Property at an exact placeId match to the calling organization, without fuzzy matching. A Property at the same place under another Customer is never returned or linked; this Customer gets a new Property. customFields accepts any active Field; an answer to a Property Field (see isPropertyField) becomes the Property's answer, is recorded in its history, and fills that Field on the Property's draft Quotes and open Projects where it is still blank. isPrimary asks for this organization to be the Property's primary service provider and defaults to true. A new Property takes it as sent. On a Property already on file it applies only when no organization is primary; the link succeeds either way, so read access.isPrimary on the response for the outcome. It has no effect when this organization already has access. Requires Idempotency-Key. Required scope: properties:write.
Creates a Property for the Customer, or links that Customer's own Property at an exact placeId match to the calling organization, without fuzzy matching. A Property at the same place under another Customer is never returned or linked; this Customer gets a new Property. customFields accepts any active Field; an answer to a Property Field (see isPropertyField) becomes the Property's answer, is recorded in its history, and fills that Field on the Property's draft Quotes and open Projects where it is still blank. isPrimary asks for this organization to be the Property's primary service provider and defaults to true. A new Property takes it as sent. On a Property already on file it applies only when no organization is primary; the link succeeds either way, so read access.isPrimary on the response for the outcome. It has no effect when this organization already has access. Requires Idempotency-Key. Required scope: properties:write.
Create or link a Property. Use an organization API key with properties:write. Check the response envelope and meta.requestId before triggering dependent workflow steps.
Required scopes
Parameters
No path or query parameters.
Request body
| Field | Type | Description |
|---|---|---|
| customerIdrequired | string | Optional unless marked required. |
| addressrequired | string | Optional unless marked required. |
| cityrequired | string | Optional unless marked required. |
| staterequired | string | Optional unless marked required. |
| zipCoderequired | string | Optional unless marked required. |
| placeId | string | null | Optional unless marked required. |
| latitude | number | null | Optional unless marked required. |
| longitude | number | null | Optional unless marked required. |
| formattedAddress | string | null | Optional unless marked required. |
| country | string | Optional unless marked required. |
| serviceTypes[] | array<string> | Optional unless marked required. |
| isPrimary | boolean | Optional unless marked required. |
| customFields | object | Field Values keyed by savedIdentity from GET /api/v1/schema. |
| externalReferences[] | array<object> | Optional unless marked required. |
| externalReferences[].externalSystemrequired | string | Optional unless marked required. |
| externalReferences[].externalObjectrequired | string | Optional unless marked required. |
| externalReferences[].externalIdrequired | string | Optional unless marked required. |
| externalReferences[].metadata | object | Optional unless marked required. |
{
"customerId": "customer_123",
"address": "1 Market St",
"city": "San Francisco",
"state": "CA",
"zipCode": "94105",
"country": "US",
"serviceTypes": [
"SOLAR"
]
}Responses
Property envelope
#/components/schemas/OrgApiResourceEnvelope
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: properties:write
#/components/schemas/OrgApiError
Customer not found
#/components/schemas/OrgApiError
Rate limit exceeded
#/components/schemas/OrgApiError
Errors
Static examples
curl -X POST "$SOLAROS_BASE_URL/api/v1/properties" \
-H "Authorization: Bearer $SOLAROS_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SOLAROS_IDEMPOTENCY_KEY" \
--data '{"customerId":"customer_123","address":"1 Market St","city":"San Francisco","state":"CA","zipCode":"94105","country":"US","serviceTypes":["SOLAR"]}'