Skip to main content
POST
Customer Schedule Sync

Choose a schedule mode

POST /customers/schedule/sync is one endpoint with two different operations. Choose the mode before using the request schema or sending a request. For a new origination integration, start with the Origination overview. The enrollment guide and this reference describe different uses of this same URL; there is no separate enrollment endpoint. Select the enrollment request variant in the API playground and always include scheduleMode: "enroll" and Idempotency-Key.
Omitting scheduleMode selects replacement behavior. It does not enroll an application. Do not omit it when retrying an origination request.

Replacement behavior

The remainder of this page describes replacement mode only. Enrollment has its own required fields, response receipt, and conflict rules in the linked guide. Existing replacement integrations do not need to add an idempotency header.

Overview

Replacement mode creates or updates the customer and runs the account’s configured scheduling workflow. Where replacement proceeds, it cancels active call, email, and SMS schedules and their eligible pending communications before creating replacement schedules. Its effects are not limited to voice calls. Company and task-type support are checked independently of origination enrollment. Some integrations require an eligible active loan; the request can save the customer without creating a schedule when that requirement is not met. Existing schedule preservation also depends on the configured workflow. Do not interpret HTTP 200 alone as a new cadence or an unconditional cancellation of all activity. Repeating a replacement request can change schedule IDs and restart cadence timing. It does not provide the durable replay semantics of enrollment mode.

Authentication

Authentication via X-API-Key header. See Authentication for details.

Request Body

For replacement mode, use the SyncCustomerSchedule request schema with scheduleMode: "replace" or omit scheduleMode. Its fields are described below. For origination enrollment, use OriginationEnrollmentRequest with scheduleMode: "enroll" and an Idempotency-Key header. See Enroll an Application for its required fields and examples. Both schemas use POST /customers/schedule/sync. loanIds is not a scheduling input here. Enrollment-only fields such as mobilePhone, oneOff, and cadence ages are ignored in replacement mode, so sending them does not select an origination cadence. This endpoint keeps its required fields and its loanId parameter. It participates in the test → isTest migration: isTest is accepted now, and test is deprecated and removed on 25 October 2026, the same date as customer creation and batch enrollment. See the sync and enrollment window.

Always Required

id and taskType must be sent in the request. The remaining core fields below must be available after optional LMS fetching; with sync: true, supported LMS integrations can fill them before validation.
  • id - External customer reference ID (required)
  • firstName - Customer’s first name (required)
  • lastName - Customer’s last name (required)
  • phoneNumber - Customer’s phone number (required) - Used for automated calling and SMS communications
  • timezone - Customer’s timezone as an IANA timezone name (e.g., “America/New_York”, “America/Los_Angeles”, “America/Chicago”) (required) - Required for TCPA compliance to ensure calls are made during appropriate hours. Must be a valid IANA timezone identifier.
  • taskType - Task type for customer’s call schedule (required)

Required unless sync: true

  • email - Customer email address (required)
  • streetAddress1 - Street address line 1 (required)
  • city - City name (required)
  • state - State code (e.g., “NY”, “CA”) (required)
  • zipCode - ZIP/postal code (required)

Optional Fields

  • birthday - Customer birthday (YYYY-MM-DD format)
  • ssnLastFour - Last 4 digits of SSN
  • doNotCall - Whether to mark customer for Do Not Call (optional; if not provided, existing value is preserved)
  • isTest - Mark customer as test customer (optional; if not provided, the existing value is preserved). Replaces the deprecated test field
  • test - Deprecated, removed on 25 October 2026. Still accepted and still honored; send isTest instead. Sending both with different values is rejected with 400
  • externalMetadata - Custom JSON object with additional customer data
  • streetAddress2 - Street address line 2
  • loanId - External loan reference used by configured LMS workflows; supplying it does not itself enable notes or other write-back
  • sync - When true, auto-fetch missing customer data from your company’s LMS (default: false). See the Create Customer endpoint for details.

Response Body

Replacement mode returns the saved customer fields defined by the response model, along with scheduling counters. Optional fields can be null. This includes:
  • Basic Information: id, firstName, lastName, email, phoneNumber, timezone
  • Personal Information: birthday, ssnLastFour
  • Address Information: streetAddress1, streetAddress2, city, state, zipCode
  • Configuration: taskType, doNotCall, isTest
  • Custom Data: externalMetadata - The complete metadata object you provided
  • Sync Metadata: scheduleCreated, tasksCreated, existingTasksRemoved - Information about the sync operation performed
The response is not a verbatim copy of the request: for example, phone numbers are normalized, and loanId is not returned as a top-level customer field. The flag is returned as isTest, which is now also the name to send it under.
In replace mode, omitting the flag entirely leaves the customer’s existing value alone. Until 25 September 2026 a sync that omitted test silently cleared it, un-marking an existing test customer; that is fixed.

Sync Metadata Fields

In addition to all the customer fields, the response includes three metadata fields that describe the sync operation:
  • scheduleCreated (boolean): Whether the configured workflow created a replacement schedule. A phone and timezone alone do not guarantee this; eligible loans and account configuration also matter.
  • tasksCreated (integer): The workflow’s initial task counter, generally one per created schedule. It is not the total number of future calls in a cadence. Enrollment uses this field differently, as described in its guide.
  • existingTasksRemoved (integer): Currently returned as 0 in replacement mode, including when existing schedules are cancelled. Do not use it to count cancellations or infer that no previous communications changed.

Schedule Creation

The response will indicate whether the schedule was successfully created via the scheduleCreated field.

Do Not Call Validation

If an existing customer is already marked as Do Not Call, the endpoint will return a 400 error unless you explicitly set doNotCall: false in the request. Behavior:
  • If doNotCall is not provided (omitted from request) and the customer has Do Not Call status → Error (prevents accidental schedule creation)
  • If doNotCall: true and the customer has Do Not Call status → Error (attempting to maintain Do Not Call while creating schedule)
  • If doNotCall: false and the customer has Do Not Call status → Success (explicitly removing Do Not Call and creating schedule)
  • If doNotCall is not provided and the customer does NOT have Do Not Call status → Success (preserves existing state)

Idempotency

Replacement mode upserts the customer and may rebuild their pending schedules. It does not record an Idempotency-Key receipt. Confirm the current schedule before repeating a request whose outcome is uncertain. Enrollment mode provides durable retry receipts without resetting cadence progress.

Use Cases

This endpoint is useful for:
  • Re-syncing customer data from external systems
  • Resetting call schedules after customer information changes
  • Individual customer resyncs in an existing integration; this endpoint accepts one customer per request
  • Integration workflows that intentionally replace pending schedules

Authorizations

X-API-Key
string
header
required

Headers

Idempotency-Key
string

Required only for scheduleMode=enroll. Reuse this key and the same payload when retrying. Scoped to your API-key company.

Required string length: 1 - 128
Pattern: ^[A-Za-z0-9._:-]{1,128}$

Body

application/json

Choose the enrollment schema for scheduleMode=enroll (requires Idempotency-Key), or the replacement schema for scheduleMode=replace or omitted. See the Origination guide for enrollment examples.

Replacement-mode request. Send id and taskType. Unless sync is true, also send the core contact fields, email, and address listed below. With sync=true, a supported LMS must supply any missing core contact fields before scheduling. This contract is independent of Create Customer and origination enrollment.

id
string
required

Unique identifier for the customer. This is your customer reference and should match your internal system's ID.

taskType
string
required

Type of tasks to create for the customer's automated call schedule. Valid values depend on company configuration.

Example:

"Collections"

firstName
string

The first name of the customer. Required unless sync=true supplies it from a supported LMS.

lastName
string

The last name of the customer. Required unless sync=true supplies it from a supported LMS.

email
string<email>

Customer email address. Required unless sync is true.

birthday
string<date>

Customer birthday in YYYY-MM-DD format

Example:

"1985-06-15"

ssnLastFour
string

Last 4 digits of SSN

Example:

"1234"

timezone
string

Timezone of the customer (IANA timezone name, e.g., 'America/New_York', 'America/Los_Angeles'). Required for TCPA compliance so calls are placed during permitted hours. Required unless sync=true supplies it from a supported LMS.

phoneNumber
string

Phone number of the customer. Required unless sync=true supplies it from a supported LMS.

streetAddress1
string

Street address line 1. Required unless sync is true.

Example:

"123 Main St"

streetAddress2
string

Street address line 2 (optional)

Example:

"Apt 4B"

city
string

City. Required unless sync is true.

Example:

"San Francisco"

state
string

State code. Required unless sync is true.

Example:

"CA"

zipCode
string

ZIP/postal code. Required unless sync is true.

Example:

"94102"

doNotCall
boolean

Do not call the customer. If omitted, the existing value is preserved.

isTest
boolean

Mark customer as test customer. Matches the isTest field returned on every customer response, and replaces the deprecated test field. When omitted, the customer's existing value is preserved.

test
boolean
deprecated

DEPRECATED — use isTest. Still accepted and still honored, and removed on 2026-10-25. Sending both test and isTest is allowed while they agree; conflicting values are rejected with 400. See /api-reference/upcoming-changes.

externalMetadata
object

Additional custom metadata about the customer (e.g. employer information, pay schedule, additional contact details)

sync
boolean
default:false

When true, auto-fetch missing customer data from your integrated lending system. Defaults to false.

loanId
string

External loan reference used by configured LMS workflows. Supplying it does not itself enable notes or other write-back.

scheduleMode
enum<string>
default:replace

Omit or use replace to retain the existing customer schedule replacement behavior.

Available options:
replace

Response

Customer schedule synced successfully

Replacement mode returns saved customer data. Enrollment mode builds customer fields from the normalized request alongside a saved scheduling receipt; phoneNumber falls back to mobilePhone and doNotCall is always false. Enrollment fields are not a read of the current customer record or proof of current calling eligibility. Optional fields may be null.

id
string
required

Customer ID (reference_id)

firstName
string
required

Customer's first name

lastName
string
required

Customer's last name

scheduleCreated
boolean
required

Whether a new schedule was created during this sync operation

Example:

true

tasksCreated
integer
required

Replacement: initial task counter, generally one per created schedule, not total future calls. Enrollment: receipt scheduledCallCount when status is scheduled, otherwise 0. Replays retain original counters.

Example:

1

existingTasksRemoved
integer
required

Currently 0 in both modes. Replacement may still cancel schedules; this field is not a cancellation count.

Example:

0

email
string<email> | null

Customer email address

birthday
string<date> | null

Customer birthday in YYYY-MM-DD format

ssnLastFour
string | null

Last 4 digits of SSN

timezone
string | null

Timezone of the customer (IANA timezone name, e.g., 'America/New_York', 'America/Los_Angeles')

phoneNumber
string | null

Phone number of the customer

streetAddress1
string | null

Street address line 1

streetAddress2
string | null

Street address line 2 (optional)

city
string | null

City name

state
string | null

State code (e.g., NY, CA)

zipCode
string | null

ZIP/postal code

doNotCall
boolean | null

Do not call the customer

isTest
boolean | null

Indicates if this is a test customer

taskType
string | null

Type of tasks created for the customer's automated call schedule

externalMetadata
object | null

Additional custom metadata about the customer