Update a Material Request
Records order progress made outside solarOS: status, vendor, order reference, dates, actual cost, pickup Location, and notes. Only fields sent are changed; meta.changedFields lists what changed, and a request whose values already match is not written. A status change moves the request's project step as it would in solarOS. Moving to PICKED_UP stamps pickedUpAt, leaves pickedUpBy empty, and marks pending and ordered line items picked up. Line items and the Work Order link are not changed here. Required scope: material_reqs:write.
Records order progress made outside solarOS: status, vendor, order reference, dates, actual cost, pickup Location, and notes. Only fields sent are changed; meta.changedFields lists what changed, and a request whose values already match is not written. A status change moves the request's project step as it would in solarOS. Moving to PICKED_UP stamps pickedUpAt, leaves pickedUpBy empty, and marks pending and ordered line items picked up. Line items and the Work Order link are not changed here. Required scope: material_reqs:write.
Update a Material Request. Use an organization API key with material_reqs:write. Check the response envelope and meta.requestId before triggering dependent workflow steps.
Required scopes
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | Material Req identifier returned by the Organization API. |
Request body
| Field | Type | Description |
|---|---|---|
| status | PENDING | ORDERED | PARTIALLY_RECEIVED | RECEIVED | READY_FOR_PICKUP | PICKED_UP | CANCELLED | A change moves the request's project step as it would in solarOS. PICKED_UP stamps pickedUpAt and marks pending and ordered line items picked up. |
| neededByDate | string | null | A day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time. |
| vendorName | string | null | Optional unless marked required. |
| vendorOrderRef | string | null | The vendor's order or PO number. |
| orderedDate | string | null | A day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time. |
| expectedDate | string | null | A day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time. |
| receivedDate | string | null | A day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time. |
| actualCost | number | null | Optional unless marked required. |
| pickupLocationId | string | null | An id from GET /pickup-locations. |
| notes | string | null | Optional unless marked required. |
{
"status": "READY_FOR_PICKUP",
"expectedDate": "2026-11-03",
"actualCost": 9725.5,
"pickupLocationId": "location_123"
}Responses
Updated Material Request envelope
#/components/schemas/MaterialRequestEnvelope
Validation error, or a pickup Location that is archived or not open for pickup
#/components/schemas/OrgApiError
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: material_reqs:write
#/components/schemas/OrgApiError
Material Request or pickup Location not found
#/components/schemas/OrgApiError
Rate limit exceeded
#/components/schemas/OrgApiError
Errors
Static examples
curl -X PATCH "$SOLAROS_BASE_URL/api/v1/material-reqs/$SOLAROS_MATERIAL_REQ" \
-H "Authorization: Bearer $SOLAROS_API_KEY" \
-H "Content-Type: application/json" \
--data '{"status":"READY_FOR_PICKUP","expectedDate":"2026-11-03","actualCost":9725.5,"pickupLocationId":"location_123"}'