scheduleMode: "enroll" to the existing schedule-sync endpoint. Send one
application per request here. For a whole list, use batch enrollment. The company associated with your X-API-Key determines
which task types and cadences are available; contact your account manager to
confirm the supported modes.
Omitting scheduleMode, or setting it to "replace", retains the existing
Customer Schedule Sync behavior.
Enrollment does not cancel other calls, emails, or SMS. Conflicting applications,
paused schedules, or other active call schedules return 409 for review.
This guide covers enrollment only. For the shared request/response schema and API
playground, see Customer Schedule Sync.
For complete requests for each mode, see Origination Examples.
Supported task types
Origination enrollment (scheduleMode: "enroll") supports exactly two
taskType values. Use the case-sensitive values shown below.
Use List Task Types (GET /origination/task-types)
to retrieve these values programmatically.
The selected task type must be enabled for the company associated with your
X-API-Key. A supported task type that is not enabled for your company returns
400. Contact your account manager to confirm availability.
For a single returning-borrower call, use PendingLoanReturning with
oneOff: true; this is an option, not a separate task type. See
Cadences for scheduling behavior.
Example
Fields
Use strings for customer references, application references, ZIP codes, and SSN suffixes to preserve leading zeroes. Send birthdays asYYYY-MM-DD. Only the last
four SSN digits are needed; do not send a full SSN.
Omit optional values you do not have. Optional contact fields and the two
cadence-age fields accept
null; oneOff, test, isTest, and sync do not. Send the
age fields as JSON integers, not strings, fractions, or booleans. Unrecognized
fields are rejected rather than ignored.
test and isTest mean the same thing and either is honored until the removal date. Sending both
with different values is rejected with 422 and code conflicting_test_flags; nothing is enrolled.
Because this endpoint rejects unrecognized fields outright, there is no risk of a payload quietly
enrolling as production after the removal date — it will fail loudly. See the sync and enrollment
window.
Both supplied phone numbers must have 10 digits, or 11 digits beginning with
1; the API normalizes them to +1…. This validates format, not whether a number
is assigned or reachable. An invalid mobile number produces an error instead of
silently changing the call plan. sync: true and nonempty externalMetadata are
not supported in enrollment mode; send the explicit fields above.
Enrollment preserves existing contact restrictions. It cannot remove a Do Not
Call restriction through doNotCall: false; doNotCall: true is also rejected.
Cadences
A matching active cadence with a pending or in-progress call is returned as
already_scheduled without changing borrower data or resetting its progress.
The application reference, customer, company, and outreach mode must match;
switching between returning and one-off is not an update to an existing cadence.
A finished, cancelled, or paused application cadence cannot be restarted by
changing the idempotency key. Coordinate an intentional restart with your
account manager; this enrollment operation does not provide it.
Use Update Customer for supported
profile changes such as the primary phoneNumber, email, or timezone. That
operation does not update mobilePhone, cadence-age fields, or oneOff, and it
does not rebuild the call plan. Coordinate changes to those fields separately.
Retries
Idempotency-Key is required only for scheduleMode: "enroll". Use a stable,
non-sensitive identifier of 1–128 characters: letters, digits, ., _, :, or
-. Keep the same key and payload when retrying after a timeout or network error.
- The same company, key, and normalized payload return the saved enrollment receipt, even after the cadence finishes or is cancelled.
- Reusing a key with a different payload returns
409. - A different key for the same active application returns
already_scheduled. - An in-progress request returns
409withRetry-After; retry the original key. - Keys are scoped to the company associated with the API key.
Retry-After
on 429 and 503 responses and retry with exponential backoff and jitter.
Response
Responses use HTTP200. The top-level customer fields are built from the
normalized request, with two exceptions: phoneNumber falls back to mobilePhone
when no primary number is supplied, and doNotCall is always returned as false.
These fields are not a read of the current customer record. In particular,
already_scheduled does not persist submitted contact changes, and doNotCall
does not prove the customer is currently callable, including on a replay. Use
Get Customer for the customer fields that
operation exposes, and scheduled-call status for current scheduling state.
Enrollment also returns mobilePhone, middleName, the schedule counters, and
an origination receipt. Optional response fields can be null. The following
is the scheduling portion of the response, not the complete customer response:
Idempotency-Replayed: true identifies a replay. Its counters describe the
original enrollment, not newly created calls. A newly submitted key returning
already_scheduled has scheduleCreated: false and tasksCreated: 0.
scheduledCallCount is the total number of nondeleted calls in the saved cadence,
not the number of remaining attempts.
Location points to /scheduled-calls/{scheduledCallId}. Use the scheduled
call detail endpoint to
track current status; the enrollment receipt is a snapshot.
Errors
Enrollment validation, conflict, and quota errors have a structureddetail:
detail.code to distinguish request_in_progress from other 409 conflicts.
Authentication errors may instead contain a plain-string detail; do not assume
every error has the enrollment shape. Invalid fields return sanitized messages
without echoing the submitted identity values.