Communicator

Send and receive communications like email and text messages with borrowers and their contacts.

Return the list of all templates

Securityoauth2 or bearerAuth or apiKeyHeader
Request
query Parameters
limit
integer [ 1 .. 100 ]
Default: 25

The maximum count of results to retrieve.

startingAfter
string

Return results starting after the provided object identifier.

endingBefore
string

Return results ending before the provided object identifier.

companyId
string

A company ID to filter by

Responses
200

OK

default

Unexpected error

get/communicator/templatedescriptors
Response samples
application/json
[
  • {
    }
]

Create a new template descriptor

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json

The new template descriptor

id
string
string or string

The subject of the template

channel
string

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"
language
string = 2 characters
productId
string or null
companyId
string
activeVersionId
string or null
sensitive
boolean
enabled
boolean
Default: true
Responses
200

OK

400

Bad request

post/communicator/templatedescriptors
Request samples
application/json
{
  • "id": "string",
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "voice",
  • "language": "en",
  • "productId": "string",
  • "companyId": "string",
  • "activeVersionId": "string",
  • "sensitive": true,
  • "enabled": true
}
Response samples
application/json
{
  • "id": "string",
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "voice",
  • "language": "en",
  • "productId": "string",
  • "companyId": "string",
  • "activeVersionId": "string",
  • "sensitive": true,
  • "enabled": true
}

Get the template descriptor by ID

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
descriptorId
required
string

Database ID of a template descriptor

Responses
200

OK

default

Unexpected error

get/communicator/templatedescriptors/{descriptorId}
Response samples
application/json
{
  • "id": "string",
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "voice",
  • "language": "en",
  • "productId": "string",
  • "companyId": "string",
  • "activeVersionId": "string",
  • "sensitive": true,
  • "enabled": true
}

Update the template descriptor

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
descriptorId
required
string

Database ID of a template descriptor

Request Body schema: application/json

The updated template descriptor

id
string
string or string

The subject of the template

channel
string

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"
language
string = 2 characters
productId
string or null
companyId
string
activeVersionId
string or null
sensitive
boolean
enabled
boolean
Default: true
Responses
200

OK

400

Bad request

put/communicator/templatedescriptors/{descriptorId}
Request samples
application/json
{
  • "id": "string",
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "voice",
  • "language": "en",
  • "productId": "string",
  • "companyId": "string",
  • "activeVersionId": "string",
  • "sensitive": true,
  • "enabled": true
}
Response samples
application/json
{
  • "id": "string",
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "voice",
  • "language": "en",
  • "productId": "string",
  • "companyId": "string",
  • "activeVersionId": "string",
  • "sensitive": true,
  • "enabled": true
}

Delete the template descriptor

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
descriptorId
required
string

Database ID of a template descriptor

Responses
200

OK

404

Not Found

delete/communicator/templatedescriptors/{descriptorId}

Get all templates with the given descriptor

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
descriptorId
required
string

Database ID of a template descriptor

query Parameters
limit
integer [ 1 .. 100 ]
Default: 25

The maximum count of results to retrieve.

startingAfter
string

Return results starting after the provided object identifier.

endingBefore
string

Return results ending before the provided object identifier.

Responses
200

OK

get/communicator/templatedescriptors/{descriptorId}/templates
Response samples
application/json
[
  • {
    }
]

Return the list of all templates

Securityoauth2 or bearerAuth or apiKeyHeader
Request
query Parameters
limit
integer [ 1 .. 100 ]
Default: 25

The maximum count of results to retrieve.

startingAfter
string

Return results starting after the provided object identifier.

endingBefore
string

Return results ending before the provided object identifier.

companyId
string

A company ID to filter by

Responses
200

OK

get/communicator/templates
Response samples
application/json
[
  • {
    }
]

Create a new template

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json

The new template

id
string
descriptorId
string
status
string
Enum: "draft" "deployed" "deprecated"
subjectLineTemplate
string or null
contentTextTemplate
string or null
contentHtmlTemplate
string or null
Responses
200

OK

400

Bad request

post/communicator/templates
Request samples
application/json
{
  • "id": "string",
  • "descriptorId": "string",
  • "status": "draft",
  • "subjectLineTemplate": "string",
  • "contentTextTemplate": "string",
  • "contentHtmlTemplate": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "descriptorId": "string",
  • "status": "draft",
  • "subjectLineTemplate": "string",
  • "contentTextTemplate": "string",
  • "contentHtmlTemplate": "string"
}

Get the template by the IDs

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
templateId
required
string

Database ID of the template

Responses
200

OK

get/communicator/templates/{templateId}
Response samples
application/json
{
  • "id": "string",
  • "descriptorId": "string",
  • "status": "draft",
  • "subjectLineTemplate": "string",
  • "contentTextTemplate": "string",
  • "contentHtmlTemplate": "string"
}

Update the template

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
templateId
required
string

Database ID of the template to update

Request Body schema: application/json

The fields to template

id
string
descriptorId
string
status
string
Enum: "draft" "deployed" "deprecated"
subjectLineTemplate
string or null
contentTextTemplate
string or null
contentHtmlTemplate
string or null
Responses
200

OK

400

Bad request

put/communicator/templates/{templateId}
Request samples
application/json
{
  • "id": "string",
  • "descriptorId": "string",
  • "status": "draft",
  • "subjectLineTemplate": "string",
  • "contentTextTemplate": "string",
  • "contentHtmlTemplate": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "descriptorId": "string",
  • "status": "draft",
  • "subjectLineTemplate": "string",
  • "contentTextTemplate": "string",
  • "contentHtmlTemplate": "string"
}

Delete the template

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
templateId
required
string

Database ID of a template version

Responses
200

OK

404

Not Found

delete/communicator/templates/{templateId}

Activate the template with the given ID

Securityoauth2 or bearerAuth or apiKeyHeader
Request
path Parameters
templateId
required
string

Database ID of the template

Responses
200

OK

put/communicator/templates/{templateId}/activate

Download all descriptors and template versions in JSON format

Securityoauth2 or bearerAuth or apiKeyHeader
Request
query Parameters
companyId
required
string

The company to export templates

activeOnly
boolean
Default: true

Export only active templates

Responses
200

OK

get/communicator/templates/export
Response samples
application/json
[
  • null
]

Restore previously exported templates

Securityoauth2 or bearerAuth or apiKeyHeader
Request
query Parameters
companyId
required
string

The company to import templates for

allowActivate
boolean
Default: true

If an imported version data has new content and is marked active, activate the newly created template version.

Request Body schema: application/json

The exported template data

Array
any
Responses
204

Successfully imported

post/communicator/templates/import
Request samples
application/json
[
  • null
]

Send a message

Send a message and save it as a new interaction

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json
subject
required
string

The subject of the interaction. This is relevant only if the interaction was rendered from a Peach template.

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" "freeForm" "freeFormBranded" "futurepayCanceled" "futurepayPaymentDueReminder" "identityTheftIncompleteDocumentation" "identityTheftNotValidated" "identityTheftSubmitDocumentation" "identityTheftSubmitDocumentationFirstReminder" "identityTheftSubmitDocumentationSecondReminder" "identityTheftValidated" "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" "paymentDueDateReminder" "paymentFailed" "paymentProcessing" "paymentRescheduled" "paymentReversalFailed" "paymentReversalProcessing" "paymentSuccessful" "payoffStatementDocument" "promoProgramCanceled" "promoProgramEligibilityAtRisk" "promoProgramExercised" "promoProgramReminder" "reimbursementFailed" "reimbursementProcessed" "reimbursementScheduled" "scraApplicationDenied" "scraBenefitsApplied" "scraBenefitsExpiringNotice" "scraCGFlaggedDocumentRequest" "scraServicemanNotifiedDocumentRequest" "settlementOffer" "settlementOfferFirstReminder" "statement" "statementLOC" "unmonitoredEmailAddress" "updateBankAccountConnection" "null"
channel
string

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"
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.
  • Statements or payment reminders should be marked as outOpsLoan.
Enum: "agentNotification" "opsCollDebt" "opsCollLocateBorrower" "opsCollVerifyEmployment" "opsCollContactEmployerNotice" "opsLoanTimeBarredNotice" "opsLoanValidationOfDebtNotice" "opsServicingDebtValidation" "opsServicingNegativeCreditReportNotice" "opsServicingTimeBarredNotice" "opsServicingVerificationOfDebt" "opsServicing" "opsAccountCredentials" "inbMissingFeature" "inbEducation" "inbBug" "inbRequest" "inbHumanLove" "inbUnknown" "inbOther"
personId
required
string
contactId
string
loanId
string
loanIds
Array of strings
caseId
string
context
object
attachments
Array of strings

An optional list of documents to attach to the outgoing email.

supercaseBulkOperationId
string
previousInteractionId
string
isTransactional
boolean
Default: true
useTemplate
boolean
Default: true

Only applicable when channel=mail. If false, will not generate content from a template and will instead only use the documents referenced in the attachments field.

Responses
202

OK

412

User has DoNotInteract

post/communicator/send
Request samples
application/json
{
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "voice",
  • "theme": "agentNotification",
  • "personId": "string",
  • "contactId": "string",
  • "loanId": "string",
  • "loanIds": [
    ],
  • "caseId": "string",
  • "context": { },
  • "attachments": [
    ],
  • "supercaseBulkOperationId": "string",
  • "previousInteractionId": "string",
  • "isTransactional": true,
  • "useTemplate": true
}

Receive a message

Receive a message—performing associated automated actions and saving a new interaction.

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json
Any of:
channel
required
string

The channel by which an interaction occurs.

Enum: "fax" "mail" "gui" "document"
content
object or null

The content and attributes of the message sent. Normally in JSON format.

contactId
string

An identifier of an existing contact.

loanId
string or null

An identifier of a loan to track interactions for. This can either be Peach's or a lender's external identifier.

loanIds
Array of strings

A list of identifiers of loans to track interactions for. This can either be Peach's or a lender's external identifiers.

subject
string

The subject of the interaction. This is relevant only if the interaction was rendered from a Peach template.

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" "freeForm" "freeFormBranded" "futurepayCanceled" "futurepayPaymentDueReminder" "identityTheftIncompleteDocumentation" "identityTheftNotValidated" "identityTheftSubmitDocumentation" "identityTheftSubmitDocumentationFirstReminder" "identityTheftSubmitDocumentationSecondReminder" "identityTheftValidated" "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" "paymentDueDateReminder" "paymentFailed" "paymentProcessing" "paymentRescheduled" "paymentReversalFailed" "paymentReversalProcessing" "paymentSuccessful" "payoffStatementDocument" "promoProgramCanceled" "promoProgramEligibilityAtRisk" "promoProgramExercised" "promoProgramReminder" "reimbursementFailed" "reimbursementProcessed" "reimbursementScheduled" "scraApplicationDenied" "scraBenefitsApplied" "scraBenefitsExpiringNotice" "scraCGFlaggedDocumentRequest" "scraServicemanNotifiedDocumentRequest" "settlementOffer" "settlementOfferFirstReminder" "statement" "statementLOC" "unmonitoredEmailAddress" "updateBankAccountConnection" "null"
theme
required
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.
  • Statements or payment reminders should be marked as outOpsLoan.
Enum: "agentNotification" "opsCollDebt" "opsCollLocateBorrower" "opsCollVerifyEmployment" "opsCollContactEmployerNotice" "opsLoanTimeBarredNotice" "opsLoanValidationOfDebtNotice" "opsServicingDebtValidation" "opsServicingNegativeCreditReportNotice" "opsServicingTimeBarredNotice" "opsServicingVerificationOfDebt" "opsServicing" "opsAccountCredentials" "inbMissingFeature" "inbEducation" "inbBug" "inbRequest" "inbHumanLove" "inbUnknown" "inbOther"
sensitive
boolean or null
Default: false

Set this flag if this interaction has sensitive information. The flag is used for proper authorization of access to the information.

externalId
string or null [ 1 .. 255 ] characters

The lender's identifier for the interaction.

After the object is successfully created, a lender can use ID or externalId identifiers to fetch the object.

To fetch the object using externalId you need to add ext- to the URL.

Note: Don't add ext- to the identifier value. For example: if the external identifier is ABCDE, then pass externalId=ACBCE and NOT ext-ABCDE when creating the object.

previousInteractionId
string or null

If a previous interaction identifier is provided, the current and previous interactions will be linked. This can either be Peach's or a lender's external identifier.

status
required
string

The status of an interaction.

status is important, as it can impact future interactions. For instance, in jurisdictions which cap the number of outbound collection communications to a borrower, status=failed interactions do not count against the legal allotment.

Interaction status can be updated as the interaction status changes. For example, when an email is sent, set the status to attempted. If the email is opened, set the status to succeeded. If the email bounces, set the status to failed. attempted is assumed to be a successful interaction. Optionally, you can also use 'statusDetails' to provide additional details about status.

In-Progress interactions

Some interactions—like an email—take place at a single point in time, others might be ongoing for many minutes—like a phone call.

Ongoing interactions like voice and chat may have their status set to inProgress.

Scheduled interactions

Some interactions might be scheduled for the future. These interactions have a status of scheduled. If this scheduled interaction is unscheduled then it has a status of canceled.

Null

Note that null is not a valid status name but rather can be used to specify a query for interactions with a status of null

Enum: "attempted" "succeeded" "failed" "scheduled" "canceled" "inProgress" "null"
metaData
object or null

Store any type of key/value pairs in the form of a JSON dictionary.

isTransactional
boolean or null

true when this interaction is considered "transactional". Transactional interactions are those which are sent via an automated system in response to an event or some action taken. e.g., an email sent because a payment has been made is transactional. An example of a non-transactional message is a one sent by an agent in response to a customer request or for collections.

Note: Can be null for interactions sent before the transactional-ness was added to the API.

direction
string
Enum: "outbound" "inbound"
contactExternalId
string or null

The lender's identifier of the contact information.

This should not include any ext- prefix as we know this is an external ID field.

agentOutcome
string or null

Provides details on the outcome of the interaction according to an agent.

Note this captures the "human" outcome of an interaction: e.g., Did you talk the person you intended to? Did the other chat recipient become unresponsive?

For the "technical" status of an interaction, see statusDetails. e.g., : Did it fail to send? Was it blocked by Compliance Guard?

  • voiceSpokeWithFirstParty - Agent spoke with borrower
  • voiceSpokeWithThirdParty - Agent spoke with someone other than the borrower
  • voiceLeftVoicemail - Agent left voicemail
  • voiceReachedVoicemailNoMessageLeft - Agent reached voicemail but did not leave a message
  • voiceRangNoPickup - Phone rang, no voicemail was reached, and the call ended, or the agent hung up
  • voiceLineBusyNoRing - Agent reached busy phone line
  • voicePickedHungUp - Agent heard call pick up and immediate hang up
  • voiceDisconnectedWhileQueuedOnHold - Caller hung up while on hold
  • voiceUnexpectedDisconnect - The call was unexpectedly disconnected
  • voiceFailedToInitiate - Outbound voice call could not start for some reason
  • voiceNumberDisconnected - Outbound voice call to disconnected phone number
Enum: "voiceSpokeWithFirstParty" "voiceSpokeWithThirdParty" "voiceLeftVoicemail" "voiceLineBusyNoRing" "voiceReachedVoicemailNoMessageLeft" "voiceRangNoPickup" "voicePickedHungUp" "voiceFailedToInitiate" "voiceNumberDisconnected" "voiceUnexpectedDisconnect"
statusDetails
string or null

Provides more details about the status of an interaction.

Note that statusDetails related to the "technical" status of an interaction: e.g., Did it connect? Did it fail to send? Was it blocked by Compliance Guard?

For the "human" outcome of an interaction see agentOutcome: e.g., Did you talk the person you intended to? Did the other chat recipient become unresponsive?

Status

Certain status details must have a particular status associated with them; attempting to use them otherwise will result in an error.

Succeeded

The following status details are considered status=succeeded

  • emailDelivered - The email was successfully delivered
  • emailOpened - The email was opened
  • chatRead - The chat message was read

Attempted

The following status details are considered status=attempted.

  • voiceReceivedOutsideOpenHours - Caller tried to contact the lender outside designated business hours
  • voiceConnected - Voice call connected successfully
  • emailSent - Email was sent, but delivery cannot be confirmed
  • mailSent - Mail sent
  • chatPosted - Chat message sent
  • textConvoTimeoutAutoclose - This text conversation was closed automatically due to a timeout.
  • textConvoClosedStale - (Deprecated) An open but outdated text conversation was closed automatically when a new text conversation was started. New text conversations should never enter into this state, but old conversations may be in this state.
  • textConvoClosedByAgent - The agent manually marked the text conversation as ended.

Failed

The following status details are considered status=failed.

Generally an interaction is failed if some part of connecting or completing the interaction failed due to a technical failure, misconfiguration, or attempt to communicate in a way disallowed by rules.

  • voiceFailedToInitiate - Outbound voice call could not start for some reason
  • voiceNumberDisconnected - Outbound voice call to disconnected phone number
  • voiceLenderDisabledInboundCalls - Inbound call received while lender has inbound voice call disabled
  • voiceReceivedNoAgentsAvailable - Inbound call received while lender had no agents to answer it
  • emailBlocked - Receiving server could not or would not accept the message temporarily
  • emailBounced - Receiving server could not or would not accept mail to this recipient permanently
  • emailDropped - Email rejected for a number of reasons: rejected as SPAM, Unsubscribed Address, Bounced Address, Email Invalid
  • emailFailedToSend - Not currently in use - reserved for future use
  • emailReportedAsSpam - Email was delivered, but later reported as SPAM by recipient
  • textLenderDisabledInboundTexts - The inbound text was not received because the lender does not have inbound texting enabled.
  • textConvoUnknownNumberRejected - This text was received from an unknown number, and so was rejected.
  • textQueueOverflow - Too many messages were queued to be sent, and some were dropped as a result.
  • textAccountSuspended - The account was suspended between message queuing and delivery.
  • textDeviceUnreachable - The destination phone number temporarily could not be reached - it was turned off, out of service area, etc.
  • textMessageBlocked - The destination phone number is blocked from receiving the message.
  • textNumberDisconnected - The destination phone number could not be reached and may be disconnected.
  • textLandlineOrUnreachableCarrier - The destination phone number could not receive the message. Reasons include the destination number being a landline phone or the carrier being temporarily unavailable.
  • textCarrierViolation - The message was flagged as 'objectionable' or 'spam' by the phone carrier and was blocked. See https://support.twilio.com/hc/en-us/articles/223181848-How-Does-Message-Filtering-Work-
  • textUnknownError - An unknown error occurred when attempting to send the message.
  • textMissingSegment - One or more parts of a multipart message were not received.
  • textMessagePriceExceedsMax - The price of the message exceeds the max price parameter.

Channels

  • Most status details can only be used with their respective channels. e.g., voiceNumberDisconnected can only be used for interactions with channel=voice. Using them otherwise will result in an error
  • invalidContact and blockedByComplianceGuard are valid for all channels

Direction

Certain status details are only valid with certain direction settings. Using them with an invalid direction will result in an error. For example...

  • voiceReceivedNoAgentsAvailable can only be set for inbound phone calls
  • voiceNumberDisconnected can only be set for outbound phone calls
  • voiceUnexpectedDisconnect can be set for either direction

Null

Note that null is not a valid status name but rather can be used to specify a query for interactions with a status of null

Enum: "voiceSpokeWithFirstParty" "voiceSpokeWithThirdParty" "voiceLeftVoicemailFirstParty" "voiceLeftVoicemailThirdParty" "voiceLeftVoicemail" "voiceLineBusyNoRing" "voiceReachedVoicemailNoMessageLeft" "voiceRangNoPickup" "voicePickedHungUp" "voiceFailedToInitiate" "voiceNumberDisconnected" "voiceReceivedOutsideOpenHours" "voiceUnexpectedDisconnect" "voiceDisconnectedWhileQueuedOnHold" "voiceReceivedNoAgentsAvailable" "voiceLenderDisabledInboundCalls" "voiceConnected" "emailSent" "emailDelivered" "emailBlocked" "emailBounced" "emailOpened" "emailDropped" "emailFailedToSend" "emailReportedAsSpam" "mailFailedToCreate" "mailSent" "mailReturnedToSender" "mailDeleted" "chatPosted" "chatRead" "chatBorrowerInactivity" "textConvoTimeoutAutoclose" "textConvoClosedStale" "textConvoUnknownNumberRejected" "textConvoClosedByAgent" "textLenderDisabledInboundTexts" "textQueueOverflow" "textAccountSuspended" "textDeviceUnreachable" "textMessageBlocked" "textNumberDisconnected" "textLandlineOrUnreachableCarrier" "textCarrierViolation" "textUnknownError" "textMissingSegment" "textMessagePriceExceedsMax" "blockedByComplianceGuard" "invalidContact" "null"
startedAt
string <date-time>

Start time of the interaction. If not provided we'll assume it's a timestamp of the API call. If time of day is not required provide only date.

For CRM-managed voice interactions, an inbound call is considered started when the CRM system answers the call, and an outbound call is considered started when the CRM system initiates the call.

endedAt
string or null <date-time>

End time of the interaction. This attribute is optional and is used for logging only.

For CRM-managed voice interactions, a call is considered ended when either the borrower or the agent disconnects.

scheduledAtFrom
string <date-time>

Time to start the scheduled interaction.

scheduledAtTo
string <date-time>

Time to end the scheduled interaction.

failureDescriptionShort
string or null

Short text describing the failure reason. Normally displayed in UI.

failureDescriptionLong
string or null

Detailed text describing the failure reason and any appropriate actions the user may take to fix the issue.

complianceGuardRuleId
string or null

The Compliance Guard rule identifier that blocked the interaction. Only applicable if the statusDetails=blockedByComplianceGuard and a rule actually blocked the interaction. In some cases the interaction can be blocked before rules are checked (e.g. a borrower is missing an address). In such a case the complianceGuardRuleId will be empty/null.

object

Represents various users such as a borrower, co-borrower, co-signer, etc. A lender can choose to provide PII or not. If no PII is provided, Peach cannot monitor for bankruptcy, deceased and SCRA.

object (contactInformation)

The contact details. A contact can be email, phone, address, etc. The name attribute is optional, and is useful for third-party contacts such as spouse, attorney, etc.

personId
string or null

The ID of the borrower to which this interaction is associated

Responses
200

Success

post/communicator/receive
Request samples
application/json
{
  • "channel": "fax",
  • "content": { },
  • "contactId": "string",
  • "loanId": "string",
  • "loanIds": [
    ],
  • "subject": "annualPrivacyPolicyNotice",
  • "theme": "agentNotification",
  • "sensitive": false,
  • "externalId": "string",
  • "previousInteractionId": "string",
  • "status": "attempted",
  • "metaData": { },
  • "isTransactional": true,
  • "direction": "outbound",
  • "contactExternalId": "string",
  • "agentOutcome": "voiceSpokeWithFirstParty",
  • "statusDetails": "voiceSpokeWithFirstParty",
  • "startedAt": "2019-08-24T14:15:22Z",
  • "endedAt": "2019-08-24T14:15:22Z",
  • "scheduledAtFrom": "2019-08-24T14:15:22Z",
  • "scheduledAtTo": "2019-08-24T14:15:22Z",
  • "failureDescriptionShort": "string",
  • "failureDescriptionLong": "string",
  • "complianceGuardRuleId": "string",
  • "borrower": {
    },
  • "contact": {
    },
  • "personId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Resend an existing interaction

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json
interactionId
required
string

The interaction to resend

Responses
202

Accepted

post/communicator/resend
Request samples
application/json
{
  • "interactionId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Render template

Securityoauth2 or bearerAuth or apiKeyHeader
Request
query Parameters
fmt
string
Default: "html"

The desired output format.

Enum: "text" "html" "pdf"
Request Body schema: application/json

Template selectors and the data

subject
required
string

The subject of the interaction. This is relevant only if the interaction was rendered from a Peach template.

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" "freeForm" "freeFormBranded" "futurepayCanceled" "futurepayPaymentDueReminder" "identityTheftIncompleteDocumentation" "identityTheftNotValidated" "identityTheftSubmitDocumentation" "identityTheftSubmitDocumentationFirstReminder" "identityTheftSubmitDocumentationSecondReminder" "identityTheftValidated" "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" "paymentDueDateReminder" "paymentFailed" "paymentProcessing" "paymentRescheduled" "paymentReversalFailed" "paymentReversalProcessing" "paymentSuccessful" "payoffStatementDocument" "promoProgramCanceled" "promoProgramEligibilityAtRisk" "promoProgramExercised" "promoProgramReminder" "reimbursementFailed" "reimbursementProcessed" "reimbursementScheduled" "scraApplicationDenied" "scraBenefitsApplied" "scraBenefitsExpiringNotice" "scraCGFlaggedDocumentRequest" "scraServicemanNotifiedDocumentRequest" "settlementOffer" "settlementOfferFirstReminder" "statement" "statementLOC" "unmonitoredEmailAddress" "updateBankAccountConnection" "null"
channel
required
string

Templates with the same subject can have multiple versions per channel. For example: paymentFailed can have email and text message (aka SMS) versions.

Enum: "email" "text" "mail" "gui" "document"
personId
required
string

The unique identifier of the Borrower. Can be Peach or a lender's external identifier. The borrower attributes will be used as dynamic fields in the template.

loanId
string

The unique identifier of the Loan. Can be Peach or lender's external identifier. The loan attributes will be used as dynamic fields in the template.

caseId
string

The unique identifier of the Case. Can be Peach or lender's external identifier. The case attributes will be used as dynamic fields in the template.

context
object

The data that is necessary to render the template in JSON format. It's a mapping of dynamic field names to values. Keep in mind that attributes of Borrower, Loan, Case or Statement objects don't need to be passed again if provided in personId, loanId, caseId or statementId.

Example:

{
  "dateSigned": "Aug 27, 2021"
  "lenderName": "Peachy Lender"
  "paymentMethod": "bankAccount"
  "paymentMethodLastFour": "1110"
  "supportEmail": "support@peach.com"
  "supportPhone": "888-888-8888"
}
Responses
200

OK

post/communicator/render
Request samples
application/json
{
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "email",
  • "personId": "string",
  • "loanId": "string",
  • "caseId": "string",
  • "context": { }
}

Render template to document

Securityoauth2 or bearerAuth or apiKeyHeader
Request
query Parameters
fmt
string
Default: "html"

The desired output format.

Enum: "text" "html" "pdf"
Request Body schema: application/json

Template selectors, context and the document ID

subject
required
string

The subject of the interaction. This is relevant only if the interaction was rendered from a Peach template.

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" "freeForm" "freeFormBranded" "futurepayCanceled" "futurepayPaymentDueReminder" "identityTheftIncompleteDocumentation" "identityTheftNotValidated" "identityTheftSubmitDocumentation" "identityTheftSubmitDocumentationFirstReminder" "identityTheftSubmitDocumentationSecondReminder" "identityTheftValidated" "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" "paymentDueDateReminder" "paymentFailed" "paymentProcessing" "paymentRescheduled" "paymentReversalFailed" "paymentReversalProcessing" "paymentSuccessful" "payoffStatementDocument" "promoProgramCanceled" "promoProgramEligibilityAtRisk" "promoProgramExercised" "promoProgramReminder" "reimbursementFailed" "reimbursementProcessed" "reimbursementScheduled" "scraApplicationDenied" "scraBenefitsApplied" "scraBenefitsExpiringNotice" "scraCGFlaggedDocumentRequest" "scraServicemanNotifiedDocumentRequest" "settlementOffer" "settlementOfferFirstReminder" "statement" "statementLOC" "unmonitoredEmailAddress" "updateBankAccountConnection" "null"
channel
required
string

Templates with the same subject can have multiple versions per channel. For example: paymentFailed can have email and text message (aka SMS) versions.

Enum: "email" "text" "mail" "gui" "document"
personId
required
string

The unique identifier of the Borrower. Can be Peach or a lender's external identifier. The borrower attributes will be used as dynamic fields in the template.

loanId
string

The unique identifier of the Loan. Can be Peach or lender's external identifier. The loan attributes will be used as dynamic fields in the template.

caseId
string

The unique identifier of the Case. Can be Peach or lender's external identifier. The case attributes will be used as dynamic fields in the template.

context
object

The data that is necessary to render the template in JSON format. It's a mapping of dynamic field names to values. Keep in mind that attributes of Borrower, Loan, Case or Statement objects don't need to be passed again if provided in personId, loanId, caseId or statementId.

Example:

{
  "dateSigned": "Aug 27, 2021"
  "lenderName": "Peachy Lender"
  "paymentMethod": "bankAccount"
  "paymentMethodLastFour": "1110"
  "supportEmail": "support@peach.com"
  "supportPhone": "888-888-8888"
}
statementId
string

The unique identifier of the Statement. Can be Peach or lender's external identifier. The statement attributes will be used as dynamic fields in the template.

documentId
required
string

The unique identifier of the Document Descriptor. Can be Peach or lender's external identifier. The rendered content will create a file in HTML or text format and associate it with the documentId. To convert the rendered document to PDF please use another endpoint, convert_person_document, as an extra step.

Responses
200

OK

post/communicator/render-to-document
Request samples
application/json
{
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "email",
  • "personId": "string",
  • "loanId": "string",
  • "caseId": "string",
  • "context": { },
  • "statementId": "string",
  • "documentId": "string"
}

Get the message, do not send

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json

Template selectors and the data

subject
required
string

The subject of the interaction. This is relevant only if the interaction was rendered from a Peach template.

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" "freeForm" "freeFormBranded" "futurepayCanceled" "futurepayPaymentDueReminder" "identityTheftIncompleteDocumentation" "identityTheftNotValidated" "identityTheftSubmitDocumentation" "identityTheftSubmitDocumentationFirstReminder" "identityTheftSubmitDocumentationSecondReminder" "identityTheftValidated" "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" "paymentDueDateReminder" "paymentFailed" "paymentProcessing" "paymentRescheduled" "paymentReversalFailed" "paymentReversalProcessing" "paymentSuccessful" "payoffStatementDocument" "promoProgramCanceled" "promoProgramEligibilityAtRisk" "promoProgramExercised" "promoProgramReminder" "reimbursementFailed" "reimbursementProcessed" "reimbursementScheduled" "scraApplicationDenied" "scraBenefitsApplied" "scraBenefitsExpiringNotice" "scraCGFlaggedDocumentRequest" "scraServicemanNotifiedDocumentRequest" "settlementOffer" "settlementOfferFirstReminder" "statement" "statementLOC" "unmonitoredEmailAddress" "updateBankAccountConnection" "null"
channel
required
string

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"
personId
required
string
loanId
string
caseId
string
context
object
Responses
200

OK

post/communicator/preview
Request samples
application/json
{
  • "subject": "annualPrivacyPolicyNotice",
  • "channel": "voice",
  • "personId": "string",
  • "loanId": "string",
  • "caseId": "string",
  • "context": { }
}
Response samples
application/json
{
  • "subjectLine": "string",
  • "contentHtml": "string",
  • "contentText": "string"
}

Helper interface for sending branded free form email.

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json
personalizations
required
Array of any

Specifies the email destination. See the body of POST /mail/send at https://sendgrid.com/docs/api-reference/.

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.
  • Statements or payment reminders should be marked as outOpsLoan.
Enum: "agentNotification" "opsCollDebt" "opsCollLocateBorrower" "opsCollVerifyEmployment" "opsCollContactEmployerNotice" "opsLoanTimeBarredNotice" "opsLoanValidationOfDebtNotice" "opsServicingDebtValidation" "opsServicingNegativeCreditReportNotice" "opsServicingTimeBarredNotice" "opsServicingVerificationOfDebt" "opsServicing" "opsAccountCredentials" "inbMissingFeature" "inbEducation" "inbBug" "inbRequest" "inbHumanLove" "inbUnknown" "inbOther"
language
string
Default: "en"

A two character code of the email language.

subjectLine
string

The subject line of the email

contentHtml
string

The content of the email in the HTML format.

contentPlain
string

The content of the email in the plain text format.

previousInteractionId
string

The ID of an existing interaction to link the new interaction to.

isTransactional
boolean
Default: false
Responses
202

Accepted

post/communicator/send-free-form-email
Request samples
application/json
{
  • "personalizations": [
    ],
  • "theme": "agentNotification",
  • "language": "en",
  • "subjectLine": "string",
  • "contentHtml": "string",
  • "contentPlain": "string",
  • "previousInteractionId": "string",
  • "isTransactional": false
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Preview a free form email message

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json

Subject line and content of the free form email.

subjectLine
string

The subject line of the email

contentHtml
string

The content of the email in the HTML format.

contentPlain
string

The content of the email in the plain text format.

Responses
200

OK

post/communicator/preview-free-form-email
Request samples
application/json
{
  • "subjectLine": "string",
  • "contentHtml": "string",
  • "contentPlain": "string"
}
Response samples
application/json
{
  • "subjectLine": "string",
  • "contentHtml": "string",
  • "contentText": "string"
}

Send confirmation code for contact verification

Securityoauth2 or bearerAuth or apiKeyHeader
Request
Request Body schema: application/json
personId
required
string

The borrower's unique identifier. Can be Peach or lender's external identifier.

email
string

The destination email address.

phone
string

The destination phone number.

channel
string

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"
context
object

Template specific properties to substitute in the corresponding ConfirmationCode template.

Responses
202

OK

post/communicator/send-confirmation-code
Request samples
application/json
{
  • "personId": "string",
  • "email": "string",
  • "phone": "string",
  • "channel": "voice",
  • "context": { }
}

Get descriptions of all template subjects

Securityoauth2 or bearerAuth or apiKeyHeader
Responses
200

OK

get/communicator/subjects
Response samples
application/json
[
  • {
    }
]