Compliance Guard

Compliance Guard helps ensures communications with borrowers are compliant with regulations.

Can interact

Returns whether or not a communication is allowed with a borrower.

It uses past interactions, current borrower status, loan status, and relevant Compliance Guard rules to make a decision if it is permissable to communicate with a borrower.

Note this endpoint always returns a 200 status code if we could successfully calculate a result. (i.e., even if a communication is not permitted this is a 200 response.)

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
personId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

A Borrower's unique identifier, tied to a person or a business. Can be Peach or a lender's external identifier.

Request Body schema: application/json
required
loanId
string (AssociatedLoanId)

The ID of a Loan. This marks a particular loan as associated with this interaction.

loanIds
Array of strings (AssociatedLoanIds)

The IDs of several loans. This marks several loans as associated with this interaction.

channel
required
string or null (InteractionChannel)

The channel where interactions with a borrower occur. For example, an outbound call with a borrower is considered voice.

Enum: "voice" "email" "fax" "text" "chat" "mail" "gui" "document"
subject
string (InteractionSubject)

The subject of the interaction. The subject identifies the category of the content in the message.

Most subjects have an associated implicit theme. e.g., loanOverdueFirstNotice has a theme of opsCollDebt. For these subjects it is not necessary to specify a theme.

Some subjects like freeForm and custom<N> do not have an implicit theme. When using these subjects you must specify a theme.

Note that locStatementGenerated and locStatementRegenerated are deprecated. They will be automatically converted into statementGenerated and statementRegenerated respectively. You should should switch to those subjects directly.

Enum: "annualPrivacyPolicyNotice" "autopayAgreement" "autopayAmountChanged" "autopayCanceledBySystem" "autopayEnabled" "autopayEnableReminder" "autopayPaymentCanceled" "autopayPaymentMethodUpdated" "autopayPaymentReminder" "autopayPaymentRescheduled" "cardExpiresReminder" "caseEscalation" "ceaseCommunicationAcknowledgement" "ceaseCommunicationRefuseToPay" "confirmationCode" "contactTakeover" "creditNegativeInfoReported" "creditPositiveInfoReported" "custom1" "custom2" "custom3" "custom4" "custom5" "custom6" "custom7" "custom8" "custom9" "custom10" "custom11" "custom12" "custom13" "custom14" "custom15" "custom16" "custom17" "custom18" "custom19" "custom20" "debtValidationNotice" "debtValidationNoticeArizona" "debtValidationNoticeAutomatic" "debtValidationNoticeNYCYonkers" "debtValidationNoticePuertoRico" "deceasedConfirmationOfPayoff" "deceasedNoticeToRepresentative" "deceasedNotificationUponDeath" "disputeOfDebtConfirmed" "disputeOfDebtSubmitDocumentation" "disputeOfDebtSubmitDocumentationReminder" "disputeOfDebtUnableToConfirm" "disputeOfDebtUnableToResolve" "documentUploadFailed" "downpaymentFailed" "drawFundsDisclosure" "electronicConsentOptOut" "failedSettlementInvestor" "failedSettlementPeach" "freeForm" "freeFormBranded" "futurepayCanceled" "futurepayPaymentDueReminder" "identityTheftIncompleteDocumentation" "identityTheftNotValidated" "identityTheftSubmitDocumentation" "identityTheftSubmitDocumentationFirstReminder" "identityTheftSubmitDocumentationSecondReminder" "identityTheftValidated" "letterReturnedToSender" "loanAccelerated" "loanCanceled" "loanChargedOffUnsecured" "loanDetails" "loanFeeCharged" "loanFreeze" "loanManualPaymentDisclosure" "loanOverdueFifthNotice" "loanOverdueFirstNotice" "loanOverdueFourthNotice" "loanOverdueSecondNotice" "loanOverdueSixthNotice" "loanOverdueThirdNotice" "loanPaidOff" "loanPaymentScheduleChanged" "loanPayoffStatement" "loanRefundProcessed" "loanRightToCurePersonalUnsecured" "loanTermsChangeAgreement" "loanUnfreeze" "locCreditLimitChanged" "locInterestRateChanged" "locLineClosed" "locStatementGenerated" "locStatementRegenerated" "loginFirstPaymentReminder" "microdepositFailed" "microdepositProcessing" "microdepositReminder" "oneTimeCode" "paydayConsumerRightsNotice" "paydayFirstPaymentWithdrawal" "paymentDisputed" "paymentDueDateReminder" "paymentFailed" "paymentMethodAdded" "paymentMethodUpdated" "paymentProcessing" "paymentRescheduled" "paymentReversalFailed" "paymentReversalProcessing" "paymentSuccessful" "payoffStatementDocument" "promiseToPayPeriodKept" "promiseToPayPeriodMissed" "promiseToPayPlanCanceled" "promiseToPayPlanCreated" "promoProgramCanceled" "promoProgramEligibilityAtRisk" "promoProgramExercised" "promoProgramReminder" "reimbursementFailed" "reimbursementProcessed" "reimbursementScheduled" "scraApplicationDenied" "scraBenefitsApplied" "scraBenefitsExpiringNotice" "scraCGFlaggedDocumentRequest" "scraServicemanNotifiedDocumentRequest" "settlementOffer" "settlementOfferFirstReminder" "statement" "statementLOC" "statementGenerated" "statementRegenerated" "unmonitoredEmailAddress" "updateBankAccountConnection"
theme
string or null (InteractionTheme)

The reason why an interaction occurred.

For example:

  • An outbound debt collection call should be marked as opsCollDebt.
  • An annual privacy policy update email should be marked as opsServicing.
  • A customer service response to borrower's inquiry should be marked as opsServicing.
  • Statements or payment reminders should be marked as outOpsLoan.

The values inbHumanLove and inbBug are deprecated; use inbGeneralInquiry instead.

Enum: "agentNotification" "opsCollDebt" "opsCollLocateBorrower" "opsCollVerifyEmployment" "opsCollContactEmployerNotice" "opsServicingDebtValidation" "opsServicingNegativeCreditReportNotice" "opsServicingTimeBarredNotice" "opsServicing" "opsAccountCredentials" "inbMissingFeature" "inbEducation" "inbBug" "inbRequest" "inbHumanLove" "inbUnknown" "inbOther" "inbServicing" "inbCollections" "inbPayments" "inbFraud" "inbGeneralInquiry"
checkAtCompanyNoon
boolean

If true, do time-based checks based on noon today, instead of now. This does not override other reasons a check can fail: the borrower having a Do Not Interact in place, having reached the interaction frequency limit, etc. This is useful for generating borrower campaigns in the morning to be carried out during business hours.

Where possible, it's always better to check permission right before an action. Many things can change (payments are made, other automated interactions are sent, consents/addresses can be updated) from when you plan something to happen to when it actually happens. Lenders are responsible for ensuring it is still permissible to conduct the interaction.

isAutodialed
boolean or null
Default: false

true if an interaction is prerecorded or autodialed call. This attribute is relevant when channel=voice. If no value is passed, we'll assume isAutodialed=false (meaning manual call). If isAutodialed=true and the contact's consentAutodialedCall=false we'll return result=false. For more information read Telephone Consumer Protection Act (TCPA).

contactId
required
string

An identifier of an existing contact.

contactExternalId
string

The lender's identifier of the contact information.

Responses
200

Success

post/people/{personId}/can-interact
Request samples
application/json
{
  • "loanId": "LN-AAAA-BBBB",
  • "loanIds": [
    ],
  • "channel": "voice",
  • "subject": "annualPrivacyPolicyNotice",
  • "theme": "agentNotification",
  • "checkAtCompanyNoon": true,
  • "isAutodialed": false,
  • "contactId": "string",
  • "contactExternalId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}