Sync ACA customers and policies
Syncs ACA customers and policies.
Customer matching (first identifier present wins): healthSherpaCustomerId → externalId → carrierAssignedCustomerId → fallback on firstName + lastName + dateOfBirth + phoneNumber.
Policy matching: healthSherpaPolicyId, then carrierAssignedPolicyId.
When a new policy is created, the customer's existing ACA policies with an effectiveDate more than one year old are terminated. policyType is always set to ACA.
Response: For each successfully synced record, results contains the full customer record (same shape as the customer.created/customer.updated webhook) along with the policies this request changed — those created or updated from the request, plus any older policies auto-terminated as a side effect. The customer's untouched existing policies are not returned. Each returned policy carries a previousStatus field (its status before this request, or null if newly created); compare it with the policy's status to detect a flip — e.g. an auto-terminated policy comes back with previousStatus: "Active" and status: "Terminated".
Authorization
x-api-key API key required for authentication.
Keys begin with 'cc_' prefix. Get your API key from the Developer Dashboard.
In: header
Request Body
application/json
POST /v2/sync/aca Request body
TypeScript Definitions
Use the request body type in TypeScript.
Array of ACA customer/policy records to sync (1-100)
Customer first name (required)
Customer last name (required)
Customer phone number (required). Accepts: +1XXXXXXXXXX, XXXXXXXXXX, (XXX) XXX-XXXX
Customer postal code. Required if timezone is not provided (for TCPA compliance).
Customer timezone. Required if postalCode is not provided (for TCPA compliance). Accepts IANA format (America/New_York) or abbreviations (EST, CST, MST, PST).
Customer date of birth. Format: MM-DD-YYYY or MM/DD/YYYY
Carrier-assigned customer ID
Health Sherpa customer ID
Your external system identifier for this customer
Custom field values (max 50) Your Custom Field keys can be found here in your settings
Custom field key (e.g., 'lead_source', 'utm_campaign')
Value for the custom field
ACA policies to sync (max 10). policyType is set automatically to 'ACA'.
Name of the policy
Plan code of the policy
Insurance carrier name. Resolved against the canonical carrier list at https://api.carecycle.ai/v2/carriers — accepts any carrier displayName or registered alias (e.g. 'UHC', 'BCBSIL', 'Cigna Health and Life Insurance Company'). Generic 'BCBS' / 'Blue Cross Blue Shield' inputs are disambiguated to the correct state plan using the customer's state.
Agent Of Record NPN
Carrier-assigned policy ID (secondary identifier for matching)
The current status of the policy
Agent Of Record First Name
Agent Of Record Last Name
Number of lives covered by the policy
Health Sherpa policy ID (primary identifier for matching)
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.carecycle.ai/v2/sync/aca" \ -H "Content-Type: application/json" \ -d '{ "records": [ { "firstName": "string", "lastName": "string", "phoneNumber": "string" } ] }'{
"succeeded": 0,
"failed": 0,
"results": [
{
"id": "string",
"createdAt": "string",
"updatedAt": "string",
"externalId": "string",
"status": "string",
"firstName": "string",
"middleName": "string",
"lastName": "string",
"salutation": "string",
"suffix": "string",
"preferredName": "string",
"phoneNumber": "string",
"lineType": "string",
"email": "string",
"dateOfBirth": "string",
"language": "string",
"ethnicity": "string",
"gender": "string",
"maritalStatus": "string",
"address": "string",
"address2": "string",
"city": "string",
"county": "string",
"state": "string",
"postalCode": "string",
"timezone": "string",
"mbiNumber": "string",
"medicareCard": true,
"medicarePartADate": "string",
"medicarePartBDate": "string",
"hasMedicaid": true,
"medicaidNumber": "string",
"socialSecurityDisability": true,
"veteran": true,
"vaNumber": "string",
"householdIncome": 0,
"annualIncome": 0,
"filingStatus": "string",
"dependentCount": 0,
"subsidyEligible": true,
"subsidyAmount": 0,
"carrierAssignedCustomerId": "string",
"agentName": "string",
"agentNpn": 0,
"assignedUser": {
"id": "string",
"name": "string",
"email": "string",
"npn": "string",
"role": "string",
"licensedStates": [
"string"
]
},
"doNotCall": true,
"doNotSMS": true,
"doNotEmail": true,
"doNotMail": true,
"testCustomer": true,
"policies": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"createdAt": "string",
"createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",
"updatedAt": "string",
"updatedBy": "b0efe45f-0520-4e21-90f0-7e35f137732e",
"customerId": "87d8e330-2878-4742-a86f-dbbb3bf522ac",
"policyType": "MA",
"policySubType": "string",
"policyNumber": "string",
"applicationId": "string",
"carrierId": "81a9910c-2657-4f54-9feb-7f6d85d613bc",
"carrierName": "string",
"planName": "string",
"planCode": "string",
"carrierAssignedPolicyId": "string",
"healthSherpaPolicyId": "string",
"sunFireEnrollmentCode": "string",
"hiosId": "string",
"metalLevel": "Catastrophic",
"status": "Active",
"applicationApprovalDate": "string",
"effectiveDate": "string",
"terminationDate": "string",
"renewalDate": "string",
"enrollmentDate": "string",
"cancelledDate": "string",
"declineReason": "string",
"declineReasonDescription": "string",
"cancellationReason": "string",
"cancellationReasonDescription": "string",
"electionPeriod": "IEP",
"gracePeriodStartDate": "string",
"paidThroughDate": "string",
"ffmApplicationId": "string",
"ffmSubscriberId": "string",
"aorAgentId": "b69824d9-b3c3-46ff-b624-5d3573bdf8fa",
"aorFirstName": "string",
"aorLastName": "string",
"aorNpn": "string",
"writingAgentNpn": "string",
"writingAgentName": "string",
"sepType": "string",
"sepCode": "string",
"sepStartDate": "string",
"sepEndDate": "string",
"sepDocumentationReceived": true,
"sepDocumentationDate": "string",
"sepNotes": "string",
"monthlyPremium": "string",
"deductible": "string",
"outOfPocketMax": "string",
"subsidyAmount": "string",
"usingSubsidy": true,
"premiumMode": "Monthly",
"grossPremium": "string",
"netPremium": "string",
"initialCommission": "string",
"renewalCommission": "string",
"spifAmount": "string",
"policyLives": -2147483648,
"wasAgent": true,
"writtenAs": "New Business",
"isReplacing": "string",
"isRewrite": true,
"hospitalNetwork": "string",
"pcpNetwork": "string",
"dailyBenefit": "string",
"eliminationPeriod": -2147483648,
"benefitPeriod": -2147483648,
"hasCola": true,
"deathBenefit": "string",
"term": -2147483648,
"maturityDate": "string",
"riders": "string",
"exchangeStatus": "FFM",
"billingMethod": "string",
"benefitReminder": "string",
"surveyCompleted": true,
"reasonForPurchase": "string",
"policyNotes": "string",
"previousStatus": "string"
}
]
}
],
"errors": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"error": "string"
}
]
}{
"message": "string",
"code": "string"
}{
"message": "string",
"code": "string"
}{
"message": "string",
"code": "string"
}{
"message": "string",
"code": "string"
}{
"message": "string",
"code": "VALIDATION_ERROR",
"errors": [
{
"path": [
"string"
],
"message": "string",
"expected": "string",
"received": "string",
"code": "string"
}
],
"failedRecords": [
{
"index": 0,
"phoneNumber": "string",
"firstName": "string",
"lastName": "string",
"externalId": "string"
}
]
}{
"message": "string",
"code": "string",
"retryAfter": 0
}{
"message": "string",
"code": "string"
}