# 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.)

Endpoint: POST /people/{personId}/can-interact
Version: 2025-03-26
Security: oauth2, bearerAuth, apiKeyHeader

## Path parameters:

  - `personId` (string, required)
    A Borrower's unique identifier, tied to a person or a business. Can be Peach or a lender's external identifier.

## Request fields (application/json):

  - `channel` (string, required)
    The channel where interactions with a borrower occur. For example, an
outbound call with a borrower is considered a `voice` interaction.
**DEPRECATED**: The `fax` channel is deprecated: new interactions
cannot be created with the `fax` channel. It will be removed
from completely in the future.
    Enum: "voice", "email", "fax", "text", "chat", "mail", "gui", "document"

  - `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)
    `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).

  - `loanId` (string)
    The ID of a Loan. This marks a particular loan as associated with this interaction.
    Example: LN-AAAA-BBBB

  - `loanIds` (array)
    The IDs of several loans. This marks several loans as associated with this interaction.
    Example: ["LN-AAAA-BBBB","LB-CCCC-DDDD"]

  - `loansFromCollCase` (boolean)
    If `true`, look up the associated collections case for this borrower,
and, if it exists, use the loans in collections as input to this endpoint.
This cannot be used in conjunction with `loanId` or `loanIds` fields.
If there are no loans in collections for this borrower (i.e., no collections case),
then this endpoint executes normally as if `loanIds` were not provided.
Note:
- Borrowers may only have one collections case at a time.
- This will mostly only be useful with collections-related themes: `opsCollDebt`,
`opsCollLocateBorrower`, `opsCollVerifyEmployment`, and `opsCollContactEmployerNotice`,
but it is permissible to use with other themes.

  - `subject` (string)
    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`.
**DEPRECATED**: `locStatementGenerated` and `locStatementRegenerated` are deprecated.
They will be automatically converted into `statementGenerated` and `statementRegenerated`
respectively. You should switch to use those subjects directly.
**DEPRECATED**: `failedSettlementPeach` is deprecated. This was always a subject used by
the Peach application internally, and will no longer be used. Attempts to set this
subject will be rejected with a 400 error.
    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", "custom21", "custom22", "custom23", "custom24", "custom25", "custom26", "custom27", "custom28", "custom29", "custom30", "custom31", "custom32", "custom33", "custom34", "custom35", "custom36", "custom37", "custom38", "custom39", "custom40", "custom41", "custom42", "custom43", "custom44", "custom45", "custom46", "custom47", "custom48", "custom49", "custom50", "custom51", "custom52", "custom53", "custom54", "custom55", "custom56", "custom57", "custom58", "custom59", "custom60", "custom61", "custom62", "custom63", "custom64", "custom65", "custom66", "custom67", "custom68", "custom69", "custom70", "custom71", "custom72", "custom73", "custom74", "custom75", "custom76", "custom77", "custom78", "custom79", "custom80", "custom81", "custom82", "custom83", "custom84", "custom85", "custom86", "custom87", "custom88", "custom89", "custom90", "custom91", "custom92", "custom93", "custom94", "custom95", "custom96", "custom97", "custom98", "custom99", "custom100", "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", "loanRightToCurePersonalUnsecuredColorado", "loanRightToCurePersonalUnsecuredDC", "loanRightToCurePersonalUnsecuredIowa", "loanRightToCurePersonalUnsecuredKansas", "loanRightToCurePersonalUnsecuredMaine", "loanRightToCurePersonalUnsecuredMissouri", "loanRightToCurePersonalUnsecuredSouthCarolina", "loanRightToCurePersonalUnsecuredWestVirginia", "loanRightToCurePersonalUnsecuredWisconsin", "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)
    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`.

**DEPRECATED**: `inbBug`, `inbHumanLove`, and `opsServicingNegativeCreditReportNotice` are deprecated:
you cannot create or update interactions to have these values.
    Enum: "agentNotification", "opsCollDebt", "opsCollLocateBorrower", "opsCollVerifyEmployment", "opsCollContactEmployerNotice", "opsServicingDebtValidation", "opsServicingNegativeCreditReportNotice", "opsServicingTimeBarredNotice", "opsServicing", "opsAccountCredentials", "inbMissingFeature", "inbEducation", "inbBug", "inbRequest", "inbHumanLove", "inbUnknown", "inbOther", "inbServicing", "inbCollections", "inbPayments", "inbFraud", "inbGeneralInquiry"

  - `contactExternalId` (string)
    The lender's identifier of the contact information.

  - `contactId` (string, required)
    An identifier of an existing contact.

## Response 200 fields (application/json):

  - `message` (string)
    Description of the server action or error.

  - `status` (integer)
    HTTP status code.

  - `data` (object)

  - `data.result` (boolean)

