Create Case with Products
Endpoint Details
Base URLs
- Production:
https://api.care360-next.carevalidate.com/api/v1/cases - Staging:
https://api-staging.care360-next.carevalidate.com/api/v1/cases
Method: POST
Content-Type: application/json
Authentication
Required Headers
Authorization: Bearer <access_token>
Content-Type: application/json
Request Body Structure
Root Fields
| Field | Type | Required | Description |
|---|---|---|---|
isTest | boolean | No | Enables test mode |
forceCreate | boolean | No | Force new case creation even if an open case exists |
user | object | Yes | User details |
payment | object | No | Total payment information |
products | array | Yes | Products to attach to the case |
User Object
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"gender": "MALE",
"phoneNumber": "+1987654321",
"dob": "1990-05-15",
"languagePreferences": [
"en"
],
"shippingAddress": {}
}
User Fields
| Field | Type | Required | Notes |
|---|---|---|---|
firstName | string | Yes | Patient first name |
lastName | string | Yes | Patient last name |
email | string | Yes | Must be unique |
gender | string | No | MALE / FEMALE / OTHER |
phoneNumber | string | Yes | E.164 format |
dob | string | Yes | YYYY-MM-DD |
languagePreferences | array | No | ISO language codes |
shippingAddress | object | No | Shipping address |
Shipping Address
{
"addressLine1": "2720 Providence Hills Drive",
"addressLine2": "QAZ",
"city": "Matthews",
"state": "NC",
"country": "US",
"postalCode": "28105"
}
Total Payment
{
"amount": 159,
"currency": "USD",
"description": "Total amount",
"providerReference": {
"type": "SETUP_INTENT",
"id": "seti_xxx"
}
}
Payment Fields
| Field | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Total amount |
currency | string | Yes | ISO 4217 |
description | string | No | Payment description |
status | string | No | UNPAID if no payment method |
providerReference.type | string | Yes | SETUP_INTENT / PAYMENT_INTENT / PAYMENT_TOKEN |
providerReference.id | string | Yes | Gateway reference ID |
Products
Each case can include one or more products. Each item in the products array may include an optional subscription object. Other fields (e.g. id, form, visitType) are unchanged.
Product item fields
| Field | Type | Required | Description |
|---|---|---|---|
id | string (UUID) | Yes | Organization product ID |
visitType | string | No | Visit type (e.g. ASYNC_TEXT_EMAIL, SYNC_IN_PERSON, SYNC_PHONE,SYNC_VIDEO) |
form | object | No | Healthcare intake form (see Product Form) |
subscription | object | No | Optional subscription for this case product. If provided, values are stored on the case product and returned in GET /api/v1/cases and in GraphQL. |
Subscription object (optional)
When attaching a product, you may include a subscription object with the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
interval | string | No | One of: "day", "week", "month", "year" (case-sensitive, lowercase). |
intervalCount | integer | No | Positive integer (e.g. 1, 2, 3, 6, 12). |
Constraints:
- interval: Only
"day","week","month", or"year"(lowercase). - intervalCount: Positive integer.
Example product with subscription:
{
"id": "<organizationProductId-uuid>",
"subscription": {
"interval": "month",
"intervalCount": 3
}
}
Each case can include one or more products.
{
"id": "product-uuid",
"form": {
"title": "Healthcare Intake Form",
"description": "Patient intake form for healthcare services",
"questions": []
}
}
Product Form
{
"title": "Healthcare Form",
"description": "Patient form",
"questions": []
}
Form Questions
Question Fields
| Field | Type | Required | Description |
|---|---|---|---|
question | string | Yes | Question text |
answer | string | Yes | User response |
type | string | Yes | Question type |
required | boolean | No | Mandatory flag |
phi | boolean | No | PHI indicator |
options | array | No | Selectable options |
Supported Question Types
- TEXT
- SINGLESELECT
- MULTISELECT
PHI Handling
Questions marked with "phi": true are treated as Protected Health Information (PHI) and are stored and processed according to HIPAA compliance requirements.
Example Request
{
"isTest": true, // optional, default is false
"forceCreate": false, // optional, default is false
"user": {
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@example.com",
"gender": "MALE",
"phoneNumber": "+1987654321",
"dob": "1990-05-15",
"languagePreferences": [
"en"
],
"shippingAddress": {
"addressLine1": "2720 Providence Hills Drive",
"addressLine2": "", // Optional
"city": "New York",
"state": "NY",
"country": "US",
"postalCode": "28105"
}
},
// "promoCodes": {},
"payment": { // Optional
"amount": 159,
"currency": "USD",
// "status": "UNPAID", -- only when payment method not provided
"description": "Monthly Plan",
"providerReference": {
"type": "SETUP_INTENT", //for nmi: PAYMENT_TOKEN, stripe: SETUP_INTENT, PAYMENT_INTENT
"id": "seti_1Sk8JiGkkQS2eXzhTHyVTDj9"
}
},
"products": [
{
"id": "9fc0d0f5-f211-4bf9-b105-485b1f29eb39",
"visitType": "ASYNC_TEXT_EMAIL",
"subscription": {
"interval": "month",
"intervalCount": 3
},
"form": {
"title": "Healthcare Intake Form",
"description": "Patient intake form for healthcare services",
"questions": [
{
"question": "How much do you weigh?",
"answer": "138 lbs",
"phi": true,
"type": "TEXT"
},
{
"question": "What is your height?",
"answer": "5' 7''",
"phi": true,
"type": "TEXT"
},
{
"question": "What are your weight loss goals?",
"answer": "Lose 1-20lbs for good",
"type": "SINGLESELECT",
"required": true,
"options": [
"Lose 1-20lbs for good",
"Lose 21-50lbs for good",
"Lose over 50 for good",
"Maintain my healthy weight",
"None of the above",
"other"
]
},
{
"question": "What weight loss initiatives have you tried in the past? Select all that apply",
"answer": "[\"Other GLP1's\"]",
"type": "MULTISELECT",
"required": true,
"options": [
"Exercise",
"Dieting",
"Weight-loss Supplements",
"Intermittent Fasting",
"Other GLP1's",
"Other"
]
},
{
"question": "BMI Calculation",
"answer": "21.61",
"type": "TEXT"
},
{
"question": "What is your age?",
"answer": "58",
"type": "TEXT"
},
{
"question": "Are you currently taking any GLP-1 medications?",
"answer": "Yes",
"type": "SINGLESELECT",
"required": true,
"options": [
"Yes",
"No"
]
},
{
"question": "Which GLP-1 medication are you currently taking?",
"answer": "Compounded Semaglutide Injections ",
"type": "SINGLESELECT",
"options": [
"Compounded Semaglutide Injections",
"Compounded Tirzepatide Injections",
"Branded Semaglutide (Wegovy or Ozempic)",
"Branded Tirzepatide (Zepbound or Mounjaro)",
"Oral Semaglutide",
"Oral Tirzepatide"
]
},
{
"question": "What was the approximate date of your last dose?",
"answer": "2025-10-19",
"type": "SINGLESELECT"
},
{
"question": "What was the strength of your last dose? Please provide strength of last dose in milligrams (mg) if known",
"answer": "50 ml",
"type": "SINGLESELECT"
},
{
"question": "GLP-1 is available as an injection or a dissolvable tablet. Which do you prefer?",
"answer": "I prefer to inject",
"type": "SINGLESELECT",
"required": true,
"options": [
"I prefer to inject",
"I prefer a tablet"
]
}
]
}
},
{
"id": "9fc0d0f5-f211-4bf9-b105-485b1f29eb39",
"form": {
"title": "Healthcare Intake Form",
"description": "Patient intake form for healthcare services",
"questions": [
{
"question": "How much do you weigh QAZ?",
"answer": "138 lbs",
"phi": true,
"type": "TEXT"
},
{
"question": "What is your height new?",
"answer": "5' 7''",
"phi": true,
"type": "TEXT"
},
{
"question": "What are your weight loss goals?",
"answer": "Lose 1-20lbs for good",
"type": "SINGLESELECT",
"required": true,
"options": [
"Lose 1-20lbs for good",
"Lose 21-50lbs for good",
"Lose over 50 for good",
"Maintain my healthy weight",
"None of the above",
"other"
]
},
{
"question": "What weight loss initiatives have you tried in the past? Select all that apply",
"answer": "[\"Other GLP1's\"]",
"type": "MULTISELECT",
"required": true,
"options": [
"Exercise",
"Dieting",
"Weight-loss Supplements",
"Intermittent Fasting",
"Other GLP1's",
"Other"
]
},
{
"question": "BMI Calculation",
"answer": "21.61",
"type": "TEXT"
},
{
"question": "What is your age?",
"answer": "58",
"type": "TEXT"
},
{
"question": "Are you currently taking any GLP-1 medications?",
"answer": "Yes",
"type": "SINGLESELECT",
"required": true,
"options": [
"Yes",
"No"
]
},
{
"question": "Which GLP-1 medication are you currently taking?",
"answer": "Compounded Semaglutide Injections ",
"type": "SINGLESELECT",
"options": [
"Compounded Semaglutide Injections",
"Compounded Tirzepatide Injections",
"Branded Semaglutide (Wegovy or Ozempic)",
"Branded Tirzepatide (Zepbound or Mounjaro)",
"Oral Semaglutide",
"Oral Tirzepatide"
]
},
{
"question": "What was the approximate date of your last dose?",
"answer": "2025-10-19",
"type": "SINGLESELECT"
},
{
"question": "What was the strength of your last dose? Please provide strength of last dose in milligrams (mg) if known",
"answer": "50 ml",
"type": "SINGLESELECT"
},
{
"question": "GLP-1 is available as an injection or a dissolvable tablet. Which do you prefer?",
"answer": "I prefer to inject",
"type": "SINGLESELECT",
"required": true,
"options": [
"I prefer to inject",
"I prefer a tablet"
]
}
]
}
}
]
}
Response Format
Success Response
{
"success": true,
"data": {
"caseId": "550e8400-e29b-41d4-a716-446655440000"
}
}
Error Responses
| Code | Description |
|---|---|
| 400 | Invalid request |
| 401 | Unauthorized |
| 409 | Case conflict |
| 422 | Validation failed |
| 500 | Internal server error |
Versioning
API Version: v2.2