LendEasy/Docs
Get API keys
GuidesBorrowers & CustomersConsents & contact

Consents & contact points

Keep destinations, texting permission, verification, regulated consent records, revocation, and enforceable restrictions separate so every contact decision can be explained.

Contact safety depends on several facts that answer different questions:

Record Question it answers Example
Contact point Where could we reach the customer? Maya’s masked mobile number.
Texting permission May we text this specific phone? canReceiveSms: true, changed 2026-08-01.
Verification Did a trusted integration confirm control? Carrier and deliverability results recorded.
Consent Which regulated permission did the customer grant? An AUTODIALED_CALL consent captured in the portal.
Restriction What must be blocked regardless of a matching grant? A COMMUNICATION_HOLD on the customer.
Contact decision May this specific action execute now? SMS reminder allowed at 10:12 local time.

No single row replaces the others. A verified phone does not prove consent; a consent does not override a hold; an old eligibility decision does not authorize execution later.

Contact-point lifecycle

Verification, carrier, and deliverability results are accepted only from trusted integrations—never asserted by ordinary API callers.

A contact point is EMAIL or PHONE; contactType is immutable. Phones carry a phoneType of MOBILE, LANDLINE, VOIP, or UNKNOWN—a provider fact with provenance, not a guess based on number format. Mutations go through POST /v1/customers/{customerId}/contact-points and PUT/DELETE on /v1/customers/{customerId}/contact-points/{contactPointId} (UPDATE_LMS_CUSTOMER_CONTACT); current state is read from the customer aggregate, which masks the stored values.

Texting permission lives on the phone

canReceiveSms is the explicit texting permission for one phone contact point—not a consent record. It defaults to false and every change must carry smsPermissionChangedAt:

curl -X PUT "$BASE/v1/customers/412/contact-points/513" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: maya-sms-stop-1" \
  -d '{
    "canReceiveSms": false,
    "smsPermissionChangedAt": "2027-05-01T10:32:00-07:00"
  }'
{ "resourceId": 513, "changes": { "canReceiveSms": false } }

Changing a phone’s value resets canReceiveSms and verification state unless fresh trusted results arrive in the same change—permission attaches to a number, not to whatever number happens to occupy the slot.

Consents come from a closed catalog of four regulated types: ELECTRONIC_COMMUNICATION, AUTODIALED_CALL, ARTIFICIAL_VOICE, and UNUSUAL_TIME. There is no channel or purpose scoping on a consent; the record captures that the permission was granted, when, how, and with what evidence. A grant is immutable; revocation closes it.

curl -X POST "$BASE/v1/customers/412/consents" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: maya-autodial-consent-v1" \
  -d '{
    "consentType": "AUTODIALED_CALL",
    "capturedAt": "2026-08-01T17:05:00Z",
    "captureMethod": "BORROWER_PORTAL",
    "evidenceRef": "evd_CONSENT_41"
  }'
{ "resourceId": 71 }

Requires UPDATE_LMS_CUSTOMER_CONSENT. captureMethod records how the grant was obtained: STAFF_ATTESTED, BORROWER_PORTAL, E_SIGNATURE, RECORDED_CALL, IMPORT, SERVICING_PLANE, or PROVIDER.

GRANTED ── bodyless revoke ──► REVOKED

Revocation takes no request body; the server derives the effective time, and the original grant and its evidence remain immutable in history. A later grant creates a new consent record with new evidence; it does not reopen the old record.

curl -X POST "$BASE/v1/customers/412/consents/71/revoke" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Idempotency-Key: revoke-consent-71"
{ "resourceId": 71 }

Consent evidence references are visible only on the audited sensitive read (GET /v1/customers/{customerId}/sensitive); the aggregate shows the consent’s type, status, capture time, and method.

Payment authorization is separate

An electronic-payment authorization is not interchangeable with a communication consent. One-time payments and autopay enrollments carry their own authorizationRef evidence and terms. The CFPB’s preauthorized electronic transfer rule is a useful primary reference; your counsel-approved policy determines the exact journey and evidence for each rail.

Enforcement

The Lending Core owns contact and consent facts. The Servicing Plane combines them with local time, purpose, debt, contact frequency, representation, bankruptcy, cease, litigation, vulnerability, and jurisdiction immediately before execution. See Consent & contact eligibility.

Do not model “do not contact” as a note. Revoke the matching consent, set canReceiveSms to false where texting was the issue, and, when a broader hard stop is required, apply a COMMUNICATION_HOLD restriction via POST /v1/customers/{customerId}/restrictions.
Unified search across guides, recipes & the API referenceEsc