careCycle
Leads

Upload lead records

Upload lead records. For source attribution, create the source in careCycle first, then pass sourceId and optional leadCost with each record.

Response: For each successfully uploaded record, results contains the full customer record (same shape as the customer.created/customer.updated webhook). Lead upload does not handle policies, so no policies are returned — use /v2/sync/aca or /v2/sync/medicare for policies.

POST
/v2/leads/upload

Authorization

x-api-key
x-api-key<token>

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/leads/upload Request body

TypeScript Definitions

Use the request body type in TypeScript.

array<object>

Array of lead records to upload (1-200)

Items1 <= items <= 200
string

Customer phone number (required). Accepts: +1XXXXXXXXXX, XXXXXXXXXX, (XXX) XXX-XXXX

string | null

Customer first name

Lengthlength <= 255
string | null

Customer last name

Lengthlength <= 255
string | null
Lengthlength <= 255
string | null

Customer postal code. Required if timezone is not provided (for TCPA compliance).

string | null

Customer timezone. Required if postalCode is not provided (for TCPA compliance). Accepts IANA format (America/New_York) or abbreviations (EST, CST, MST, PST).

string | null
Lengthlength <= 50
string | null
Lengthlength <= 255
string | null
Lengthlength <= 255
string | null
Lengthlength <= 255
string | null
Lengthlength <= 255
string | null

Customer date of birth. Format: MM-DD-YYYY or MM/DD/YYYY

Match^(0[1-9]|1[0-2])[-/](0[1-9]|[12]\d|3[01])[-/]\d{4}$
string | null
Lengthlength <= 50
string | null
Value in"Male" | "Female" | "Non-Binary" | "Other" | "Prefer Not to Say"
string | null
Value in"Single" | "Married" | "Divorced" | "Widowed" | "Separated" | "Domestic Partnership"
string | null
Lengthlength <= 50
integer | null
Range-2147483648 <= value <= 2147483647
integer | null
Range-2147483648 <= value <= 2147483647
boolean | null
boolean | null
string | null
Lengthlength <= 255
boolean | null
string | null
Lengthlength <= 255
boolean | null
string | null

Carrier-assigned customer ID

Lengthlength <= 255
string | null

Health Sherpa customer ID

Lengthlength <= 255
string | null

Medicare Beneficiary Identifier

Lengthlength <= 255
boolean | null
boolean | null
boolean | null
boolean | null
string | null

Your external system identifier for this customer

Lengthlength <= 255
string | null

Public source identifier configured in careCycle. The source must exist before leads are uploaded. You may also pass the source UUID.

Lengthlength <= 255
number | null

Optional per-lead cost for dynamic CPL source billing. If omitted, the source default lead cost is used.

Range0 <= value
array<object>

Custom field values (max 50) Your Custom Field keys can be found here in your settings

Itemsitems <= 50
string

Custom field key (e.g., 'lead_source', 'utm_campaign')

Length1 <= length <= 100
string | number | boolean | array<string> | null

Value for the custom field

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/leads/upload" \  -H "Content-Type: application/json" \  -d '{    "records": [      {        "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
    }
  ],
  "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"
}