Loans

Borrowers typically have loans. We support multiple loan types and each loan type comes with its set of federal and state compliance rules. You can maintain different statuses of a loan. A borrower can have multiple loans. A loan can belong to multiple people, but only one borrower can be defined as a mainBorrower. A loan is always created using the mainBorrower borrower identifier. Other people can be added as part of the loan details.

All loan attributes can be updated as long as the loan is in pending status. Once the loan status changes to originated attributes of atOrigination object become read only and cannot be updated.

A Loan doesn't start accruing interest until it is activated. To activate the loan, call Activate a loan. On activation the loan can use the due dates and payments schedule from the atOrigination object or the loan can be re-amortized using the activation date as the loan start date.

Get loans

Get all loans associated with a company.

Securityoauth2 or bearerAuth or apiKeyHeader
Request
query Parameters
fields
string
Default: "all"

The result fields that will be fetched:

all - Fetch all fields.

idsOnly - Fetch only the following fields: id, externalId, loanTypeId, mainBorrowerId, mainBorrowerExternalId, lockStatus, and migrationStatus.

Enum: "all" "idsOnly"
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.

statuses
Array of strings

A comma separated list of loan statuses to filter by

Items Enum: "all" "active" "pending" "originated" "declined" "frozen" "accelerated" "chargedOff" "paidOff" "canceled"
managedByPeach
boolean or null

If passed, only returns loans with a loan type with "managed by peach" set to this value.

includeAdditionalBorrowers
boolean
Default: false

If set to true, include the addtionalBorrowers field containing information about other borrowers related to this loan, e.g., cosigner, coborrowers, and applicants.

loanTypeId
Array of strings (AnyId)

Use this to limit results to a specific lender product.

labels
Array of strings

A comma separated list of loan labels to filter by

createdAtBefore
string <date-time>

Filter only objects that were not created at or before the specified timestamp. This timestamp is in UTC.

createdAtAfter
string <date-time>

Filter only objects that were not created at or after the specified timestamp. This timestamp is in UTC.

updatedAtBefore
string <date-time>

Filter only objects that were not updated at or before the specified timestamp. This timestamp is in UTC.

updatedAtAfter
string <date-time>

Filter only objects that were not updated at or after the specified timestamp. This timestamp is in UTC.

originatedAtAfter
string <date-time>

Filter only objects that were not originated at or after the specified timestamp. This timestamp is in UTC.

originatedAtBefore
string <date-time>

Filter only objects that were not originated at or before the specified timestamp. This timestamp is in UTC.

activatedAtBefore
string <date-time>

Filter only objects that were not activated at or before the specified timestamp. This timestamp is in UTC.

activatedAtAfter
string <date-time>

Filter only objects that were not activated at or after the specified timestamp. This timestamp is in UTC.

sortBy
Array of strings

The data attributes by which to sort the results.

Items Enum: "createdAt" "+createdAt" "-createdAt" "updatedAt" "+updatedAt" "-updatedAt" "originatedAt" "+originatedAt" "-originatedAt" "activatedAt" "+activatedAt" "-activatedAt"
Responses
200

Success

404

Not found

get/loans
Response samples
application/json
{
  • "status": 0,
  • "total": 0,
  • "count": 0,
  • "nextUrl": "string",
  • "previousUrl": "string",
  • "data": [
    ]
}

Create loan

Add a new loan.

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.

query Parameters
validate
boolean
Default: true

Validate the contact through an external API. This is only used for addresses currently.

Request Body schema: application/json
required
Any of:

Represents a loan. A loan always belongs to a borrower, and most of the interactions between a lender and a borrower are associated with a particular loan.

type
string
Value: "installment"
object

DEPRECATED The fields in this object will not affect the loan.

loanTypeId
required
string

The loan type identifier. This is created specifically for each lender's loan product by Peach.

externalId
string or null non-empty

A lender's identifier for a loan or a draw.

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.

object or null

The reason(s) why the loan application or the draw request was declined.

metaData
object or null (MetaData)

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

Array of objects or null
Array of objects (LoanLabel)
assetType
string (LoanAssetType)

The generic asset types that are supported.

Enum: "personalClosedEndUnsecured" "personalOpenEndUnsecured" "personalClosedEndSecured" "personalOpenEndSecured" "motorMVRISC" "motorDirect" "motorLease" "businessClosedEndUnsecured" "businessOpenEndUnsecured" "businessClosedEndSecured" "businessOpenEndSecured"
mainBorrowerId
string or null

The identifier of the main borrower of the loan

nickname
string or null

The loan's nickname. Nickname is a friendly name of the loan and is displayed in the UI. Nickname is different from loan ID. Nickname can be changed by a borrower.

servicedBy
required
string (LoanServicer)

The entity type that services the loan.

creditor, thirdPartyServicer - means that the loan is serviced on the Peach platform.

debtCollectionAgency - means that the loan is no longer serviced on the Peach platform. The loan can be still visible in Borrower Portal. To clarify, the loan is not deleted from the Peach platform.

Enum: "creditor" "thirdPartyServicer" "debtCollectionAgency"
status
required
string (LoanStatus)

The current status of the loan. New loans must be created in pending, originated or declined status.

pending - the loan is in the application stage. Loan atOrigination details and terms can be changed (via API).

originated - the loan was signed by the borrower and originated by the lender. Loan atOrigination details cannot be changed. Originated loans do not start accruing interest until activated.

declined - an application was declined. This is a terminal state.

active - the loan is active. Most loans are expected to be active.

frozen - the loan is temporarily frozen. The loan will not accrue any interest, no payments can be processed, and no notifications are sent to the borrower.

accelerated - the loan was accelerated. The loan will not accrue any additional interest and the entire balance is due.

chargedOff - the loan was charged off.

paidOff - the loan was successfully paid off.

canceled - the loan was canceled. Canceled loans are not shown in UI. This is a terminal state.

Enum: "pending" "originated" "declined" "active" "frozen" "accelerated" "chargedOff" "paidOff" "canceled"
isClosed
boolean

Indicates whether the loan with multiple advances is closed. If true and the loan type installment with multiple advances, new Advances cannot be created, and the advance schedule cannot be updated.

muteLoanNotices
boolean

Indicates whether the system should stop/pause sending loan related notices to the borrower. Set to true if you want to mute all loan related notices (e.g. loanDetails. autopayEnabled, paymentFailed, etc.) Keep in mind that it will also stop all notices related to the loan that are sent from Peach Agent Portal by an agent. Note: this is not the only attribute that can stop notices from being sent. Compliance Guard and Cases Do Not Interact can also block communications.

Array of objects (PersonLoan)

For loans with multiple people attached, use this field to add additional people. You do not need to include the main borrower, who will be created from the url parameter.

object (Installment)

This object contains loan details and terms as they were shown to a borrower at origination.

object (Migration)

Loan migration details. This structure should be used for loans that are migrated from another system to Peach. To migrate a loan (see migration guidance for full details):

  1. Create a new loan in pending or originated status. The loan must be in originated before proceeding to the next step.
  2. Call relevant endpoints to create past payments, refunds, etc.
  3. Call Migrate loan endpoint.
Responses
200

Success

post/people/{personId}/loans
Request samples
application/json
{
  • "type": "installment",
  • "timestamps": {
    },
  • "loanTypeId": "string",
  • "externalId": "string",
  • "declineReason": {
    },
  • "metaData": { },
  • "additionalBorrowers": [
    ],
  • "labels": [
    ],
  • "assetType": "personalClosedEndUnsecured",
  • "mainBorrowerId": "string",
  • "nickname": "string",
  • "servicedBy": "creditor",
  • "status": "pending",
  • "isClosed": true,
  • "muteLoanNotices": true,
  • "additionalPeople": [
    ],
  • "atOrigination": {
    },
  • "migration": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Get borrower's loans

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.

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.

status
Array of strings
Items Enum: "all" "active" "pending" "originated" "declined" "frozen" "accelerated" "chargedOff" "paidOff" "canceled"
loanTypeId
Array of strings (AnyId)

Use this to limit results to a specific lender product.

includeAdditionalBorrowers
boolean
Default: false

If set to true, include the addtionalBorrowers field containing information about other borrowers related to this loan, e.g., cosigner, coborrowers, and applicants.

chargeOffBalance
string

This filter is only applicable if chargedOff is one of the statuses. In other words, this filter will only be applied on loans with status=chargedOff.

all - all chargedOff loans will be returned (honoring other filters).

hasBalance - only chargedOff loans with outstanding balance greater than zero will be returned.

zeroBalance - only chargedOff loans with zero outstanding balance will be returned.

Enum: "all" "hasBalance" "zeroBalance"
Responses
200

Success

404

Not found

get/people/{personId}/loans
Response samples
application/json
{
  • "status": 0,
  • "total": 0,
  • "count": 0,
  • "nextUrl": "string",
  • "previousUrl": "string",
  • "data": [
    ]
}

Get loan by ID

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

query Parameters
includeAdditionalBorrowers
boolean
Default: false

If set to true, include the addtionalBorrowers field containing information about other borrowers related to this loan, e.g., cosigner, coborrowers, and applicants.

Responses
200

Success

get/people/{personId}/loans/{loanId}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Update loan

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

query Parameters
validate
boolean
Default: true

Validate the contact through an external API. This is only used for addresses currently.

force
boolean
Default: false

Override that enables the update of a borrower's address of a loan.

Request Body schema: application/json
required
metaData
object or null (MetaData)

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

nickname
string

A nickname the borrower gave the loan.

muteLoanNotices
boolean

Indicates whether the system should stop/pause sending loan related notices to the borrower. Set to true if you want to mute all loan related notices (e.g. loanDetails. autopayEnabled, paymentFailed, etc.) Keep in mind that it will also stop all notices related to the loan that are sent from Peach Agent Portal by an agent. Note: this is not the only attribute that can stop notices from being sent. Compliance Guard and Cases Do Not Interact can also block communications.

status
string (LoanStatus)

The current status of the loan. New loans must be created in pending, originated or declined status.

pending - the loan is in the application stage. Loan atOrigination details and terms can be changed (via API).

originated - the loan was signed by the borrower and originated by the lender. Loan atOrigination details cannot be changed. Originated loans do not start accruing interest until activated.

declined - an application was declined. This is a terminal state.

active - the loan is active. Most loans are expected to be active.

frozen - the loan is temporarily frozen. The loan will not accrue any interest, no payments can be processed, and no notifications are sent to the borrower.

accelerated - the loan was accelerated. The loan will not accrue any additional interest and the entire balance is due.

chargedOff - the loan was charged off.

paidOff - the loan was successfully paid off.

canceled - the loan was canceled. Canceled loans are not shown in UI. This is a terminal state.

Enum: "pending" "originated" "declined" "active" "frozen" "accelerated" "chargedOff" "paidOff" "canceled"
Installment (object) or Line of Credit (object)

This object can only be updated when the loan has status=pending.

Responses
200

Success

put/people/{personId}/loans/{loanId}
Request samples
application/json
{
  • "metaData": { },
  • "nickname": "string",
  • "muteLoanNotices": true,
  • "status": "pending",
  • "atOrigination": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Get loan lock status

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Responses
200

Succeeded

get/people/{personId}/loans/{loanId}/lock-status
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Activate loan

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

query Parameters
sync
boolean
Default: false

Make the process synchronous.

Request Body schema: application/json
optional
amortizationAtActivation
string

Instructions on how to activate a loan in originated status. The loan status changes to active after a successful activation.

expectedPaymentsAtOrigination - we will use the exact atOrigination.expectedPayments due dates and amounts. The loan is not re-amortized.

amortizeAtActivation - we will re-amortize the loan using today's date as the loan start date. atOrigination.paymentFrequency and atOrigination.specificDays are used to create due dates. atOrigination.expectedPayments due dates and amounts are not used.

Enum: "expectedPaymentsAtOrigination" "amortizeAtActivation"
sendNotice
boolean
Default: true

When set to false, the system will NOT send a loanDetails notice to the borrower.

Responses
200

Success

408

Request Timeout

post/people/{personId}/loans/{loanId}/activate
Request samples
application/json
{
  • "amortizationAtActivation": "expectedPaymentsAtOrigination",
  • "sendNotice": true
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Reimburse

The reimburse endpoint should be used when the lender owes money to a borrower on a given loan. The endpoint will execute a reimbursement according to the specified reimbursementAmount. If the reimbursementAmount is greater than the amount owed to the borrower, the system will not process the reimbursement and return an error. Funds are reimbursed to a specified payment instrument. The endpoint will update the ledger and create a new transaction.

If the loan type is installment, the loan must be in paidOff status to process reimbursement. If the loan type is line of credit, the loan can be in active, accelerated, chargedOff or paidOff status to process reimbursement.

If paymentInstrumentId is isExternal=true, the payment method can be of any type (e.g. bank account, card, etc.) If paymentInstrumentId is isExternal=false and Peach is processing payments (per company configuration), the payment method must be a bank account.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
isExternal
boolean

If set to true, the lender assumes responsibility for transferring funds to the borrower. If set to false, Peach handles the transfer of funds to the borrower.

externalTransactionId
string

A transaction external identifier. If passed, the new reimbursement transaction that the system will create will have the externalTransactionId.

reimbursementAmount
required
number <float>

The requested reimbursement amount.

paymentInstrumentType
required
string
Enum: "bankAccount" "card" "check" "payroll" "paymentNetwork"
paymentInstrumentId
string^ext-|^[A-Z]{2}-[A-Z0-9]+-[A-Z0-9]+|^\d+$

Peach's unique or lender's external identifier. Not required if the paymentInstrumentType=check and the check is processed/sent by Peach.

transactionStatus
string

Only applicable if isExternal=true. The status in which the new reimbursement transaction will be created. If the status is set to pending, the caller can later update the transaction status via Update transaction endpoint. Only applicable if isExternal=true.

Enum: "pending" "succeeded"
contactId
string

An identifier of an existing contact. Required if the paymentInstrumentType is check and the check is processed/sent by Peach.

caseId
string (caseId)

An identifier for an existing case.

customDisplayName
string or null

A friendly description of the transaction. If provided, this value will be displayed in Peach UI/App and Statements (or can be used by lender in their App). If the value is not provided, the Peach UI/App and Statements logic will render the transaction name based on type and status. Make sure you provide value that makes sense to the borrower. This is NOT what the borrower will see in their online bank or card account.

Responses
201

created

post/people/{personId}/loans/{loanId}/reimburse
Request samples
application/json
{
  • "isExternal": true,
  • "externalTransactionId": "string",
  • "reimbursementAmount": 0,
  • "paymentInstrumentType": "bankAccount",
  • "paymentInstrumentId": "string",
  • "transactionStatus": "pending",
  • "contactId": "string",
  • "caseId": "string",
  • "customDisplayName": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Cancel loan

The cancel loan endpoint will change the status of a loan to canceled, and trigger any cancellation-related logic, such as removing a loan from active monitoring and handling the accounting treatment for canceled loans.

An installment loan must be in originated or pending status to be canceled.

A line of credit loan can be canceled if it has no draws with active purchases.

Special permission is required to cancel active loans.

The metro2 details may optionally be sent with the accountStatusCode to indicate what should be reported to credit agencies.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

query Parameters
force
boolean
Default: false

Override that enables the cancellation of active loans not managed by Peach. Requires the loan:cancel.force permission. Forced cancellation should only be used for testing purposes.

Request Body schema: application/json
required
cancellationReason
string (CancellationReason)

The cancellation reason:

technicalIssue - loan was created due to a technical issue.

wrongLoanTerms - loan was created with the wrong terms.

wrongBorrower - loan was created on the wrong borrower.

other - for any other reason requiring cancellation.

Enum: "technicalIssue" "wrongLoanTerms" "wrongBorrower" "other"
sendCancellationNotice
boolean
Default: false

When set to true, the system will send loanCanceled notice to the borrower.

object (LoanCancelMetro2RequestBody)
caseId
string

An identifier for an existing case.

Responses
204

Success no content

post/people/{personId}/loans/{loanId}/cancel
Request samples
application/json
{
  • "cancellationReason": "technicalIssue",
  • "sendCancellationNotice": false,
  • "metro2": {
    },
  • "caseId": "string"
}

Close loan

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
caseId
string

An identifier for an existing case.

sendNotice
boolean
Default: true

When set to true, the system will send a locLineClosed notice to the borrower.

closeReason
string

The reason why the account closed. If passed, the copy will be used in the locLineClosed communication template. Make sure to phrase the copy as a full sentence or paragraph.

closeRequestedByBorrower
required
boolean
Default: false

Set to true if a borrower requested to close the account.

Responses
204

Success no content

post/people/{personId}/loans/{loanId}/close
Request samples
application/json
{
  • "caseId": "string",
  • "sendNotice": true,
  • "closeReason": "string",
  • "closeRequestedByBorrower": false
}

Reopen a closed loan

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
caseId
string

An identifier for an existing case.

reopenReason
string

The reason the loan is being reopened.

Responses
204

Success no content

post/people/{personId}/loans/{loanId}/reopen
Request samples
application/json
{
  • "caseId": "string",
  • "reopenReason": "string"
}

Get loan credit limit

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

query Parameters
effectiveDate
string <date>
Responses
200

Success

get/people/{personId}/loans/{loanId}/credit-limit
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Update loan credit limit

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
creditLimitAmount
required
number <float>

The credit limit amount for the line or draw. Only applicable to line of credit or installment loan with multiple advances. For installment loans with multi-advances, it is the amount financed set at origination.

sendNotice
boolean
Default: true

Whether the system sent locCreditLimitChanged notice to the borrower.

adverseActionReason
string

The reason why the credit limit was changed. If passed, the copy used in the locCreditLimitChanged communication template. Make sure to phrase the copy as a full sentence or paragraph.

caseId
string

An identifier for an existing case.

Responses
200

Success

post/people/{personId}/loans/{loanId}/credit-limit
Request samples
application/json
{
  • "creditLimitAmount": 0,
  • "sendNotice": true,
  • "adverseActionReason": "string",
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Freeze loan

Freeze loan will change the status of an active loan to frozen effective as of the current date. The loan will remain in a frozen status until the Unfreeze endpoint is called.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
caseId
string

An identifier for an existing case.

sendNotice
boolean
Default: true

When set to false, the system will NOT send a loanFreeze notice to the borrower.

Responses
204

Success no content

post/people/{personId}/loans/{loanId}/freeze
Request samples
application/json
{
  • "caseId": "string",
  • "sendNotice": true
}

Unfreeze loan

The Unfreeze endpoint will change the status of a frozen loan back to active.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
previewMode
boolean
Default: false

If previewMode=true, the loan doesn't change and no changes are saved to the database.

retroactivelyAccrueInterest
boolean
Default: false

true to accrue interest (as usual) for periods occurring when the loan was frozen. false to make periodic payments occurring during the frozen period interest-free.

shiftDueDates
boolean
Default: false

true to defer the periodic payment amounts associated with periods that fall in the frozen period to one or more new periods generated at the end of a loan. false to keep the amounts in unfrozen periods.

sendNotice
boolean
Default: true

When set to false, the system will NOT send a loanUnfreeze notice to the borrower.

caseId
string

An identifier for an existing case.

Responses
200

Success

423

Locked

post/people/{personId}/loans/{loanId}/unfreeze
Request samples
application/json
{
  • "previewMode": false,
  • "retroactivelyAccrueInterest": false,
  • "shiftDueDates": false,
  • "sendNotice": true,
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "count": 0,
  • "data": {
    }
}

Accelerate loan

The accelerate endpoint will change the status of an active loan to accelerated, and trigger any acceleration-related logic and accounting treatment.

Acceleration is only valid for installment and line of credit loans.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
effectiveDate
required
string <date>

The effective date of the loan acceleration. The date should be the current date in the local timezone. Passing in "today" will also set the field to today's date.

sendNotice
boolean
Default: true

When set to false, the system will NOT send a loanAccelerated notice to the borrower.

caseId
string

An identifier for an existing case.

Responses
200

Loan Accelerate

post/people/{personId}/loans/{loanId}/accelerate
Request samples
application/json
{
  • "effectiveDate": "2019-08-24",
  • "sendNotice": true,
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Reverse accelerate

A loan must be in accelerated status to be reversed.

The reverse accelerate endpoint will reverse a loan in accelerated status, and roll back any acceleration-related logic and accounting treatment.

Reverse acceleration triggers a replay of the loan starting from the day of acceleration as if the loan was in active status. This means if the acceleration occurred on day 90 of the loan, and the reverse acceleration is triggered on day 100, the loan will be replayed as an active loan with interest accrual between days 90-100. If the reversal is triggered on day 90 (the same day of the acceleration), no additional interest is accrued. The result of a reverse acceleration is a loan in active status.

The accelerationDueWithin and chargeOffDueWithin configurations of the loan are still in force. So a loan could possibly go back to accelerated or chargedOff status during the next day if the balance is not paid on the day a reversal was made.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
caseId
string

An identifier for an existing case.

Responses
200

Loan Reverse Accelerate

post/people/{personId}/loans/{loanId}/reverse-accelerate
Request samples
application/json
{
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Charge-off loan

The charge-off endpoint will change the status of a loan to charged-off, and trigger any charge-off-related logic and accounting treatment.

A loan must be in accelerated status before being moved to charged-off. If an active loan is being charged off, this endpoint will handle moving the loan status to acceleration before charging off. Charge-off is only valid for installment and line of credit loans.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
effectiveDate
required
string <date>

The effective date of the loan charge-off. The date should be the current date in the local timezone. Passing in "today" will also set the field to today's date.

chargedOffReason
required
string

The reason for loan charge off:

term means the loan was charged off per loan type configuration after X days overdue.

fraudulent means the loan was charged off for fraudulent reason.

bankruptcy means the loan was charged off because of bankruptcy.

legal means the loan was charged off because of some legal reason.

Enum: "term" "fraudulent" "bankruptcy" "legal"
sendNotice
boolean
Default: true

When set to false, the system will NOT send a loanChargedOffUnsecured notice to the borrower.

caseId
string

An identifier for an existing case.

Responses
200

Loan Charge Off

post/people/{personId}/loans/{loanId}/charge-off
Request samples
application/json
{
  • "effectiveDate": "2019-08-24",
  • "chargedOffReason": "term",
  • "sendNotice": true,
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Reverse charge-off

A loan must be in charged-off status to be reversed.

The reverse charge-off endpoint will reverse a loan in chargedOff status, and roll back any charge-off-related logic and accounting treatment.

Reverse charge-off triggers a replay of the loan starting from the day of charge off as if the loan was in active status. This means if the charge-off occurred on day 120 of the loan, and the reverse charge-off is triggered on day 130, the loan will be replayed as an active loan with interest accrual between days 120-130. If the reversal is triggered on day 120 (the same day of the charge-off), no additional interest is accrued. The result of a reverse charge-off is a loan in active status.

The chargeOffDueWithin configurations of the loan is still in force. So a loan could possibly go back to chargedOff status during the next day if the balance is not paid on the day a reversal was made.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Request Body schema: application/json
required
caseId
string

An identifier for an existing case.

Responses
200

Loan Reverse Charge Off

post/people/{personId}/loans/{loanId}/reverse-charge-off
Request samples
application/json
{
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Refresh loan

In the case that a loan is out of sync, the refresh endpoint will make sure that obligations, expected payments, and interest accrual is brought into sync.

Refresh loan is only valid for the statuses of active, accelerate, paidOff, and chargedOff.

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

Responses
204

Success

post/people/{personId}/loans/{loanId}/refresh

Migrate loan

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.

loanId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The unique identifier of the Loan we wish to retrieve. Can be Peach or lender's external identifier.

query Parameters
sync
boolean
Default: false

Make the process synchronous.

Responses
204

Loan migration started

408

Request Timeout

post/people/{personId}/loans/{loanId}/migrate