Update Case Product
POST
/api/v1/cases/:caseIdUpdates a product associated with a case. Supports closing a case product (with an optional reason), reopening a closed product, or updating the product's due date.
cv-api-key
Production
https://api.care360-next.carevalidate.com/api/v1/cases/:caseIdStaging
https://api-staging.care360-next.carevalidate.com/api/v1/cases/:caseIdParameters
Headers
cv-api-keystringrequiredYour unique API key for authentication.
Content-TypestringrequiredMust be application/json.
Example:
application/jsonPath Parameters
caseIdstring (UUID)requiredUnique identifier of the case
Example:
ec5e0d29-bf87-46b9-98e7-03848442fe53Request Body
actionstringrequiredMust be exactly `UPDATE_CASE_PRODUCT`
Values:UPDATE_CASE_PRODUCT
caseProductInputobjectrequiredObject containing the case product update details
Show 4 child properties
productIdstring (UUID)requiredUnique identifier of the product to update
statusstringoptionalNew statuses for the Case Product: CLOSE will close the product, while OPEN will reopen a previously closed product. When using OPEN, the dueDate field will be required.
Values:OPENCLOSE
reasonstringoptionalReason for the status change. Only allowed when status is CLOSE.
dueDatestring (ISO 8601 date)optionalNew due date for the case product. Cannot be in the past, and cannot be provided together with `status`. The product must be open (status updates and closed/inactive products are rejected).
Example:
2026-08-15Examples
- cURL (Close)
- cURL (Reopen)
- cURL (Update Due Date)
- JavaScript
- Python
curl -X POST "https://api-staging.care360-next.carevalidate.com/api/v1/cases/ec5e0d29-bf87-46b9-98e7-03848442fe53" \
-H "cv-api-key: <redacted>" \
-H "Content-Type: application/json" \
-d '{
"action": "UPDATE_CASE_PRODUCT",
"caseProductInput": {
"productId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "CLOSE",
"reason": "Treatment completed"
}
}'
curl -X POST "https://api-staging.care360-next.carevalidate.com/api/v1/cases/ec5e0d29-bf87-46b9-98e7-03848442fe53" \
-H "cv-api-key: <redacted>" \
-H "Content-Type: application/json" \
-d '{
"action": "UPDATE_CASE_PRODUCT",
"caseProductInput": {
"productId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "OPEN",
"dueDate": "2026-08-15"
}
}'
curl -X POST "https://api-staging.care360-next.carevalidate.com/api/v1/cases/ec5e0d29-bf87-46b9-98e7-03848442fe53" \
-H "cv-api-key: <redacted>" \
-H "Content-Type: application/json" \
-d '{
"action": "UPDATE_CASE_PRODUCT",
"caseProductInput": {
"productId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"dueDate": "2026-08-15"
}
}'
const caseId = "ec5e0d29-bf87-46b9-98e7-03848442fe53";
const response = await fetch(
`https://api.care360-next.carevalidate.com/api/v1/cases/${caseId}`,
{
method: "POST",
headers: {
"cv-api-key": "YOUR_SECRET_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
action: "UPDATE_CASE_PRODUCT",
caseProductInput: {
productId: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
status: "CLOSE",
reason: "Treatment completed",
},
}),
}
);
const data = await response.json();
console.log(data);
import requests
case_id = "ec5e0d29-bf87-46b9-98e7-03848442fe53"
response = requests.post(
f"https://api.care360-next.carevalidate.com/api/v1/cases/{case_id}",
headers={
"cv-api-key": "YOUR_SECRET_KEY",
"Content-Type": "application/json",
},
json={
"action": "UPDATE_CASE_PRODUCT",
"caseProductInput": {
"productId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "CLOSE",
"reason": "Treatment completed",
},
},
)
print(response.json())
Responses
▶200SuccessCase product updated successfully.
{
"status": 200,
"success": true,
"message": "Case product updated successfully",
"data": {
"success": true
}
}
▶400Bad RequestReturned when the case or product ID is invalid, the status string is invalid, or the API key is missing.
{
"status": 400,
"success": false,
"message": "Invalid request",
"error": "No Case found for provided details!",
"code": "VALIDATION_ERROR"
}
▶400Validation ErrorReturned when a field fails validation (e.g., invalid UUID format).
{
"status": 400,
"success": false,
"message": "Invalid request",
"error": "caseProductInput.productId, Product id must be a valid UUID",
"code": "VALIDATION_ERROR"
}
▶400Invalid StatusReturned when status is not one of the allowed values.
{
"status": 400,
"success": false,
"message": "Invalid request",
"error": "caseProductInput.status, Status must be OPEN or CLOSE",
"code": "VALIDATION_ERROR"
}
▶400Due Date In PastReturned when the provided due date is in the past.
{
"status": 400,
"success": false,
"message": "Invalid request",
"error": "caseProductInput.dueDate, Due date cannot be in the past",
"code": "VALIDATION_ERROR"
}
▶400Due Date On Closed/Inactive ProductReturned when a due date update is attempted on a closed or inactive case product. Due dates can only be updated on open products.
{
"status": 400,
"success": false,
"message": "Invalid request",
"error": "Due date can only be updated for an open case product",
"code": "VALIDATION_ERROR"
}
▶401UnauthorizedInvalid or missing API key, or organization not found.
{
"status": 401,
"success": false,
"message": "Unauthorized"
}
▶403ForbiddenCase does not belong to the organization, or permission denied.
{
"status": 403,
"success": false,
"message": "Forbidden"
}
Try It Out
Try itAPI Playground
▶info
Case Product Close and Open (reopen) activity notifications are sent via webhooks.