CCA Partner APIs (1.0.0)
This reference is generated from the OpenAPI 3.1.0 specification stored with this documentation, so parameters, responses, and samples always match the published contract.
Introduction
This API allows your app to search providers, show availability, and submit In-App Scheduling or Stand-Alone Intake requests. For authentication setup please visit the Developer Guide page.
For authentication setup, onboarding, and sample code see the Developer Guide.
Technical Guardrails
All API integrations are subject to standard rate limiting to ensure platform stability. Invalid or missing credentials return 401 Unauthorized. Schema and request-validation failures return 400 Bad Request. Endpoint-specific codes (for example 403 and 409) are documented with each operation and on the authentication pages.
Servers
| Environment | Base URL |
|---|---|
| Production API server | https://api.ccaplatform.com |
| Sandbox / demo Members Portal API server | https://members-api.ccaplatformdemo.com |
Authentication
Scheme: http bearer
Long-lived, CCA-minted Bearer token. Unlike Token-Based Authentication's short-lived partner-minted tokens, this token is issued once by CCA and reused on every request until rotated/revoked. See the Developer Guide.
List service provider regions for a country
Returns the active state/province/region rows for the given country, used to populate the region selector before searching provider availability. Paginated.
Authorization: bearerAuth
Query parameters
| Parameter | Type | Details |
|---|---|---|
| country_coderequired | string | ISO 3166-1 alpha-2 country code. Case-insensitive. Example: "US" |
| page | integer | Page number. Default: 1 |
| page_size | integer | Results per page, up to 100. Default: 20 Maximum: 100 |
Example request
Generated from the specification, so values match the documented fields above.
curl -X GET "https://api.ccaplatform.com/partners/v1/provider-regions/?country_code=US&page=1&page_size=20" \ -H "Authorization: Bearer $CCA_TOKEN"
Responses
Search provider availability by region
Returns providers licensed in the given region (or country) with an active license, along with their available booking slots for the next 30 days. Your organization is resolved automatically from your Bearer token — you never send it. Paginated.
Authorization: bearerAuth
Query parameters
| Parameter | Type | Details |
|---|---|---|
| region_id | integer | A region id, discovered via GET /partners/v1/provider-regions/. Required for a country if that endpoint returns more than one region for it (state/province-level regions, not just a single country-wide entry) — country_code alone returns 400 for those countries. At least one of region_id or country_code is required. Where region_id is required, both may be sent together only if region_id actually belongs to country_code (e.g. a New York region_id with country_code=US); otherwise returns 400. Example: 1 |
| country_code | string | ISO 3166-1 alpha-2 country code. Matches providers licensed in the region covering that whole country. Use this alone for a country whose regions endpoint returns only a single country-wide region. For a country with state/province-level regions, it's optional but only valid alongside a matching region_id — it cannot be sent alone. At least one of region_id or country_code is required. Example: "US" |
| modality | string | Optional filter by session modality. in-person requires region_id (not just country_code) — it needs one specific region to check onsite locations against. Allowed: in-person, telephonic, in-video |
| language | string | Optional filter by spoken language (BCP-47 code, matched against languagesSpoken). Example: "en" |
| page | integer | Page number. Default: 1 |
| page_size | integer | Results per page, up to 100. Default: 20 Maximum: 100 |
Example request
Generated from the specification, so values match the documented fields above.
curl -X GET "https://api.ccaplatform.com/partners/v1/providers/?region_id=1&country_code=US&modality=in-person&language=en&page=1&page_size=20" \ -H "Authorization: Bearer $CCA_TOKEN"
Responses
Create a booking request, or a general intake if no slot is picked yet
Finds or creates the member (matched by user.external_user_id, namespaced to your partner identity) using the fields in memberData, then submits a booking request for the given provider and time slot. Calling this again with the same external_user_id updates the same member record rather than creating a duplicate.
Send the slot's utcStartTime/utcEndTime (from the availability-search response) straight through, unchanged — no timezone conversion needed.
If bookingData is omitted entirely, this submits a general intake instead of a booking — no provider/time is attached, and our operations team assigns a provider manually afterward. Only memberData and phq9Data are required in that case.
Authorization: bearerAuth
Request body (required)
| Field | Type | Details |
|---|---|---|
userrequiredobject | object | Sub-fields are listed below. |
external_user_idrequired | string | Your own stable id for this patient. Used to find-or-create the member. Example: "patient-00123" |
bookingDataobject | object | Optional. If omitted entirely, this becomes a general intake submission instead of a booking — no provider/time picked, our operations team assigns a provider afterward. |
selfSchedulingProviderIdrequired | integer | Example: 789 |
utcStartTimerequired | string | UTC time, taken directly from the availability-search response. No timezone conversion needed. A trailing "Z" is required, to state the timezone explicitly. Example: "2026-08-02T14:00:00Z" |
utcEndTimerequired | string | Must be exactly 45 minutes after utcStartTime. A trailing "Z" is required. Example: "2026-08-02T14:45:00Z" |
memberDatarequiredobject | object | Sub-fields are listed below. |
emailrequired | string | The patient's real email. Upserted onto the member record on every call. Example: "jane.doe@example.com" |
firstNamerequired | string | Example: "Jane" |
lastNamerequired | string | Example: "Doe" |
countryrequired | string | Example: "US" |
preferredName | string | |
preferredPronouns | string | Example: "She/Her" |
dob | string | Example: "1990-01-01" |
gender | string | Example: "Female" |
maritalStatus | string | Example: "Single" |
clientType | string | Example: "Employee" |
leaveVoicemail | string | Allowed: Yes, No |
phoneNumber | string | Example: "+15551234567" |
streetAddress | string | |
suite | string | Optional, can be an empty string. |
city | string | |
state | string | Example: "CA" |
zipCode | string | Example: "94105" |
reasonForSeekingSupport | string | Example: "Anxiety" |
preferredModality | string | Example: "Video Counseling" |
preferredSpokenLanguage | string | A BCP-47 language code. Example: "en" |
phq9Datarequiredarray | array of object | Sub-fields are listed below. |
question | string | Example: "PHQ-9 1.Little interest or pleasure in doing things." |
answer | string | Example: "0 Not at all" |
Example request
Generated from the specification, so values match the documented fields above.
curl -X POST "https://api.ccaplatform.com/partners/v1/booking-request/" \
-H "Authorization: Bearer $CCA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user": {
"external_user_id": "patient-00123"
},
"bookingData": {
"selfSchedulingProviderId": 789,
"utcStartTime": "2026-08-02T14:00:00Z",
"utcEndTime": "2026-08-02T14:45:00Z"
},
"memberData": {
"email": "jane.doe@example.com",
"firstName": "Jane",
"lastName": "Doe",
"country": "US",
"preferredName": "string",
"preferredPronouns": "She/Her",
"dob": "1990-01-01",
"gender": "Female",
"maritalStatus": "Single",
"clientType": "Employee",
"leaveVoicemail": "Yes",
"phoneNumber": "+15551234567",
"streetAddress": "string",
"suite": "string",
"city": "string",
"state": "CA",
"zipCode": "94105",
"reasonForSeekingSupport": "Anxiety",
"preferredModality": "Video Counseling",
"preferredSpokenLanguage": "en"
},
"phq9Data": [
{
"question": "PHQ-9 1.Little interest or pleasure in doing things.",
"answer": "0 Not at all"
}
]
}'Responses
Look up a member by external id
Looks up a member previously created via the booking-request endpoint, by the external_user_id your system assigned them. Lookup is scoped to your partner identity, so two different partners can safely reuse the same external_user_id values without colliding.
Authorization: bearerAuth
Query parameters
| Parameter | Type | Details |
|---|---|---|
| external_user_idrequired | string | The external id you assigned this member when you created them. Example: "patient-00123" |
Example request
Generated from the specification, so values match the documented fields above.
curl -X GET "https://api.ccaplatform.com/partners/v1/user/?external_user_id=patient-00123" \ -H "Authorization: Bearer $CCA_TOKEN"
