CCA

Tech Partner

Documentation

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

EnvironmentBase URL
Production API serverhttps://api.ccaplatform.com
Sandbox / demo Members Portal API serverhttps://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.

GET/partners/v1/provider-regions/

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

ParameterTypeDetails
country_coderequiredstringISO 3166-1 alpha-2 country code. Case-insensitive.
Example: "US"
pageintegerPage number.
Default: 1
page_sizeintegerResults 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

200Successfully listed the country's active regions.
400Missing or invalid country_code.
401Authentication failure.
403Partner's organization is deactivated.
409Partner has no organization configured.
GET/partners/v1/providers/

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

ParameterTypeDetails
region_idintegerA 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_codestringISO 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"
modalitystringOptional 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
languagestringOptional filter by spoken language (BCP-47 code, matched against languagesSpoken).
Example: "en"
pageintegerPage number.
Default: 1
page_sizeintegerResults 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

200Successfully listed matching providers and their availability.
400Missing region_id and country_code, region_id given with a mismatched country_code, invalid region_id/country_code/modality/language, or in-person modality without region_id.
401Authentication failure.
403Partner's organization is deactivated.
409Partner has no organization configured.
POST/partners/v1/booking-request/

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)

FieldTypeDetails
userrequiredobject
objectSub-fields are listed below.
external_user_idrequired
stringYour own stable id for this patient. Used to find-or-create the member.
Example: "patient-00123"
bookingDataobject
objectOptional. 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
stringUTC 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
stringMust be exactly 45 minutes after utcStartTime. A trailing "Z" is required.
Example: "2026-08-02T14:45:00Z"
memberDatarequiredobject
objectSub-fields are listed below.
emailrequired
stringThe 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
stringOptional, 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
stringA BCP-47 language code.
Example: "en"
phq9Datarequiredarray
array of objectSub-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

201Booking request or intake created successfully. Shape depends on whether bookingData was sent: a booking response if it was, an intake response if it wasn't.
400Validation failure (missing/invalid fields, slot no longer available, etc.).
401Authentication failure.
403Partner's organization, or the matched member, is deactivated.
409memberData.email already belongs to a different member, or partner has no organization configured.
GET/partners/v1/user/

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

ParameterTypeDetails
external_user_idrequiredstringThe 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"

Responses

200Member found.
400Missing external_user_id.
401Authentication failure.
403Member has been deactivated.
404No member exists for that external_user_id under your partner identity.