solarOS Organization API

Organization API

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.

/api/v1/material-reqs/{id}

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

material_reqs:write

Parameters

NameInTypeDescription
idrequiredpathstringMaterial Req identifier returned by the Organization API.

Request body

objectrequired
FieldTypeDescription
statusPENDING | ORDERED | PARTIALLY_RECEIVED | RECEIVED | READY_FOR_PICKUP | PICKED_UP | CANCELLEDA 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.
neededByDatestring | nullA day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time.
vendorNamestring | nullOptional unless marked required.
vendorOrderRefstring | nullThe vendor's order or PO number.
orderedDatestring | nullA day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time.
expectedDatestring | nullA day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time.
receivedDatestring | nullA day: YYYY-MM-DD, saved as midnight UTC the way solarOS's date pickers save it, or an ISO 8601 date-time.
actualCostnumber | nullOptional unless marked required.
pickupLocationIdstring | nullAn id from GET /pickup-locations.
notesstring | nullOptional unless marked required.
updatematerialreqRequest
{
  "status": "READY_FOR_PICKUP",
  "expectedDate": "2026-11-03",
  "actualCost": 9725.5,
  "pickupLocationId": "location_123"
}

Responses

200

Updated Material Request envelope

#/components/schemas/MaterialRequestEnvelope

400

Validation error, or a pickup Location that is archived or not open for pickup

#/components/schemas/OrgApiError

401

Missing or invalid organization API key

#/components/schemas/OrgApiError

402

Organization billing access or an endpoint-specific business quota denied the request

#/components/schemas/OrgApiError

403

Missing required scope: material_reqs:write

#/components/schemas/OrgApiError

404

Material Request or pickup Location not found

#/components/schemas/OrgApiError

429

Rate limit exceeded

#/components/schemas/OrgApiError

Errors

400 Validation error, or a pickup Location that is archived or not open for pickup401 Missing or invalid organization API key402 Organization billing access or an endpoint-specific business quota denied the request403 Missing required scope: material_reqs:write404 Material Request or pickup Location not found429 Rate limit exceeded

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"}'