Transactions

This object represents payments and credits. Payments represent real money that were paid back by borrowers. Credits are adjustments made on a loan. Credits lower balances similar to payments. Credits can be issued by customer service representatives or supervisors.

Create transaction

Create a transaction. Permissions required depend on the object type passed:

type permission
One Time Payment transaction:create.onetimepayment
Service Credit transaction:create.servicecredit
Down Payment transaction:create.downpayment
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
required
One of:
id
string
createdAt
string <date-time>
updatedAt
string or null <date-time>
deletedAt
string or null <date-time>
type
required
string
Value: "oneTime"
drawId
string

The draw identifier. If provided, the system will attempt to apply the payment to the specified draw. Any excess will be applied to the rest of LOC/Draws based on the multi-waterfall that is defined for the line of credit type.

isExternal
boolean

A transaction marked isExternal=true is for record purposes only. A transaction with an external paymentInstrument is automatically marked external.

externalId
string or null (externalId) <= 50 characters

A lender's identifier for a resource.

After the resource is successfully created, a lender can use the Peach assigned ID OR the externalId identifiers to fetch the resource.

Fetching with externalId:

To fetch a resource using an externalId, you MUST use the prefix ext- in the URL.

For example, a loan with an external identifier of ABCDE would be referenced like /api/people/BO-FAKE-IDNT/loans/ext-ABCDE.

Creating with externalId:

To create a resource with an external identifer, you MUST NOT use the prefix ext-.

For example, if the external identifier should be ABCDE, then pass { externalId: "ACBCE", ... } in the request body.

status
string

The transaction status. May only be passed when isExternal=true.

External transactions can be created in: scheduled, initiated, pending, succeeded, or failed. External transactions are applied to the loan balance immediately when created with status initiated, pending, or succeeded. Otherwise, they will be applied the first time they are updated to one of these statuses.

scheduled - payment or credit was scheduled for a future date that has not arrived yet. The payment has not applied to a loan yet.

initiated - payment was initiated and sent to a payment processor. The payment is applied to a loan. This status is used normally for ACH.

pending - payment was acknowledged by the payment processor and is being processed. For ACH the payment can be in pending status for a few days.

succeeded - payment was completed successfully.

failed - payment failed and was removed from the loan effective as of initiated, pending or succeeded status effective date. The system replays the loan as if the payment never happened. It will also re-accrue interest since then.

inDispute - payment is in dispute (typically because of chargeback). The payment is removed from the loan effective as of initiated, pending or succeeded status effective date. The system replays the loan as if the payment never happened. It will also re-accrue interest since then. Disputed payment can be for partial amount.

canceled - payment or credit was canceled. Payment can be canceled only if the current status is scheduled.

chargeback - payment was disputed and ruled against the lender. The payment was returned to the original payment instrument. Chargeback payment can be for partial amount.

Enum: "scheduled" "initiated" "pending" "succeeded" "failed" "canceled" "inDispute" "chargeback"
failureReason
string

The transaction failure reason. This value is ignored except when creating an external transaction with status=failed

Enum: "insufficientFunds" "chargeback" "accountClosed" "invalidAccount" "unknownReason" "invalidCvv" "invalidExpirationDate" "avsFailed" "networkError" "cardDeclined" "accountFrozen" "deceased" "invalidRouting" "paymentStopped" "incorrectNumber" "fraudulent" "unauthorizedDebit"
paymentInstrumentId
required
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

Peach's unique or lender's external identifier.

amount
required
number <float> >= 0

The amount of the payment.

scheduledDate
string <date>

This attribute should be used only for transactions that are scheduled in the future. Transactions that should be processed now/today, leave the attribute empty and the system will set appropriate date and timestamp values based on the API call time.

effectiveDate
string <date>

This attribute can be used only during the migration process of loans from another system to Peach. Any value passed for active loans will be ignored.

The effective date of the transaction in the product timezone. This attribute can be used for transactions with isExternal=true only. The date must be in the past or today. Make sure to provide effectiveTimeOfDay also.

object

The effective time of day on effectiveDate in the product timezone. This attribute can be used for transactions with isExternal=true only. Required if effectiveDate is passed.

Note: for migration only, the value must be after 2AM in the product timezone.

enablePrepayments
boolean

DEPRECATED ATTRIBUTE true if the borrower opts to apply any overpayment amount to prepayment of future obligations. false if the borrower opts to apply overpayments to the current obligation.

If this field is not passed, we reference the allowPrepayments configuration on the loan type.

holdDaysEndDate
string or null <date> (HoldDaysEndDate)

Allows lenders to configure the openToBuyAmount calculation. Peach’s system will not include the transaction in the openToBuyAmount calculation until this date. For example, if a transaction’s holdDaysEndDate is tomorrow or later, the transaction will NOT be included in the openToBuyAmount calculation. Setting this value will override loan.paymentHoldDays.numHoldDays and loanType.paymentHoldDays.numHoldDays.

If holdDaysEndDate is not set upon transaction create, the holdDaysEndDate will be calculated based on loan.paymentHoldDays.numHoldDays.

If loan.paymentHoldDays.numHoldDays is not set, holdDaysEndDate will be calculated based on loanType.paymentHoldDays.numHoldDays. This will only apply to borrower payments and is not applicable for other types of transactions (e.g. service credits)

consentDocumentId
string^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

Peach's unique or lender's external identifier.

evidenceDocumentId
string^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

Peach's unique or lender's external identifier.

caseId
string

An identifier for an existing case.

Responses
201

Created

408

Request Timeout

423

Locked

post/people/{personId}/loans/{loanId}/transactions
Request samples
application/json
{
  • "id": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "type": "oneTime",
  • "drawId": "string",
  • "isExternal": true,
  • "externalId": "string",
  • "status": "scheduled",
  • "failureReason": "insufficientFunds",
  • "paymentInstrumentId": "string",
  • "amount": 0,
  • "scheduledDate": "2019-08-24",
  • "effectiveDate": "2019-08-24",
  • "effectiveTimeOfDay": {
    },
  • "enablePrepayments": true,
  • "holdDaysEndDate": "2019-08-24",
  • "consentDocumentId": "string",
  • "evidenceDocumentId": "string",
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Get transactions

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
status
Array of strings (TransactionStatusReadOnly)
Items Enum: "scheduled" "initiated" "pending" "succeeded" "failed" "canceled" "inDispute" "chargeback"
paymentInstrumentId
string (AnyId) ^ext-|^[A-Z][A-Z0-9]-[A-Z0-9]+-[A-Z0-9]+|^\d+...

The payment instrument identifier.

isExternal
boolean

Fetch entities that are marked external.

isVirtual
boolean
transactionType
string
Enum: "payment" "serviceCredit"
serviceCreditTypes
Array of strings
Items Enum: "serviceAgent" "serviceSupervisor" "settlementOfDebt" "balanceTransfer" "refund" "fraud" "badDebt" "bankruptcy" "deceased" "usuryCap" "interestAdjustment"
toEffectiveDate
string <date>

Last day for which an object's effective date must match

fromEffectiveDate
string <date>

First day for which an object's effective date must match

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.

sortBy
Array of strings

The data attributes by which to sort the results.

Items Enum: "appliedAt" "+appliedAt" "-appliedAt" "createdAt" "+createdAt" "-createdAt" "effectiveDate" "+effectiveDate" "-effectiveDate"
Responses
200

Collection of Transactions

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

Get transaction 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.

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

Transaction ID. Can be Peach or lender's external identifier.

Responses
200

success

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

Update transaction

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.

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

Transaction ID. Can be Peach or lender's external identifier.

query Parameters
sync
boolean
Default: false

Make the process synchronous.

Request Body schema: application/json
required
id
string
createdAt
string <date-time>
updatedAt
string or null <date-time>
deletedAt
string or null <date-time>
externalId
string or null [ 1 .. 50 ] characters

A lender's identifier for an object.

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.

status
string (TransactionStatus)

The transaction status.

  • scheduled - payment or credit was scheduled for a future date that has not arrived yet. The payment has not applied to a loan yet.
  • initiated - payment was initiated and sent to a payment processor. The payment is applied to a loan. This status is used normally for ACH.
  • pending - payment was acknowledged by the payment processor and is being processed. For ACH the payment can be in pending status for a few days.
  • succeeded - payment was completed successfully.
  • failed - payment failed and was removed from the loan effective as of initiated, pending or succeeded status effective date. The system replays the loan as if the payment never happened. It will also re-accrue interest since then.
  • inDispute - payment is in dispute (typically because of chargeback). The payment is removed from the loan effective as of initiated, pending or succeeded status effective date. The system replays the loan as if the payment never happened. It will also re-accrue interest since then. Disputed payment can be for partial amount.
  • canceled - payment or credit was canceled. Payment can be canceled only if the current status is scheduled.
  • chargeback - payment was disputed and ruled against the lender. The payment was returned to the original payment instrument. Chargeback payment can be for partial amount.

In order to create or update transactions to have status inDispute or chargeback, the Create transaction chargeback and Update chargeback endpoints should be used.

Enum: "scheduled" "initiated" "pending" "succeeded" "failed" "canceled"
object

Timestamps of the transaction statuses.

actualAmount
number <float>

The actual amount that was processed. The system never debits more than the loan outstanding balance.

scheduledAmount
number <float>

The scheduled amount. The actual amount charged can be lower from the scheduled amount. It cannot be higher.

processingFeeAmount
number

Transaction processing fees that are charged by a payment processor.

processingFeeType
string

Describes whether the processing fees are net or gross. If it is a net fee, the amount of the fee is deducted from the amount of the transaction 'en route'. If it is a gross fee, the amount of the fee is charged by the processor at the end the month.

Enum: "net" "gross"
processorTransactionId
string
processorReversalId
string
processorReconciliationId
string
avsResult
string = 1 characters
failureReason
string

The transaction failure reason.

Enum: "insufficientFunds" "chargeback" "accountClosed" "invalidAccount" "unknownReason" "invalidCvv" "invalidExpirationDate" "avsFailed" "networkError" "cardDeclined" "accountFrozen" "deceased" "invalidRouting" "paymentStopped" "incorrectNumber" "fraudulent" "unauthorizedDebit"
processorFailureReason
string

The raw failure reason returned by the payment processor.

processorFailureDetails
any

The error details returned by the payment processor.

achReturnCode
string <= 5 characters

The ACH return code indicating the reason the transaction failed.

parentTransactionId
string

The ID of the real transactions that created this virtual transaction. Only relevant for virtual transactions.

cancelReason
string or null (TransactionCancelReason)
Default: "canceledByUser"

Why the transaction was canceled.

Enum: "invalidPaymentMethod" "paymentMethodRemoved" "tooManyFailedAttempts" "loanFrozen" "loanAccelerated" "loanChargedOff" "loanPaidOff" "canceledByUser" "loanTermsChanged" "balanceCheckThresholdExceeded"
holdDaysEndDate
string or null <date> (HoldDaysEndDate)

Allows lenders to configure the openToBuyAmount calculation. Peach’s system will not include the transaction in the openToBuyAmount calculation until this date. For example, if a transaction’s holdDaysEndDate is tomorrow or later, the transaction will NOT be included in the openToBuyAmount calculation. Setting this value will override loan.paymentHoldDays.numHoldDays and loanType.paymentHoldDays.numHoldDays.

If holdDaysEndDate is not set upon transaction create, the holdDaysEndDate will be calculated based on loan.paymentHoldDays.numHoldDays.

If loan.paymentHoldDays.numHoldDays is not set, holdDaysEndDate will be calculated based on loanType.paymentHoldDays.numHoldDays. This will only apply to borrower payments and is not applicable for other types of transactions (e.g. service credits)

metaData
object or null

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

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.

retryAttempt
integer or null

Number of attempts to retry processing a failed transaction.

isExternal
boolean

DEPRECATED ATTRIBUTE Updating this field does not modify the transaction.

A transaction marked isExternal=true is for record purposes only. A transaction with an external paymentInstrument is automatically marked external.

isVirtual
boolean

DEPRECATED ATTRIBUTE Updating this field does not modify the transaction.

A transaction marked isVirtual=true is not a real transaction, but represents a part of another transaction. This is used to store the principal/interest split on draws in Line of Credits as well as splits between multiple installment loans that were applied as a single payment.

paidPrincipalAmount
number <float>

DEPRECATED ATTRIBUTE Support for this field will be removed in the future.

The paid amount allocated to principal

paidInterestAmount
number <float>

DEPRECATED ATTRIBUTE Support for this field will be removed in the future.

The paid amount allocated to interest

paidFeesAmount
number <float>

DEPRECATED ATTRIBUTE Support for this field will be removed in the future.

The paid amount allocated to fees

paidOverAmount
number <float>

DEPRECATED ATTRIBUTE Support for this field will be removed in the future.

Stores any excess amount that was not allocated to principal, interest or fees.

Responses
200

Updated

408

Request Timeout

put/people/{personId}/loans/{loanId}/transactions/{transactionId}
Request samples
application/json
{
  • "id": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "externalId": "string",
  • "status": "scheduled",
  • "timestamps": {
    },
  • "transactionType": "payment",
  • "paymentDetails": {
    },
  • "actualAmount": 0,
  • "scheduledAmount": 0,
  • "currency": "string",
  • "processingFeeAmount": 0,
  • "processingFeeType": "net",
  • "processorTransactionId": "string",
  • "processorReversalId": "string",
  • "processorReconciliationId": "string",
  • "avsResult": "s",
  • "failureReason": "insufficientFunds",
  • "processorFailureReason": "string",
  • "processorFailureDetails": null,
  • "achReturnCode": "strin",
  • "parentTransactionId": "string",
  • "cancelReason": "invalidPaymentMethod",
  • "holdDaysEndDate": "2019-08-24",
  • "metaData": { },
  • "customDisplayName": "string",
  • "retryAttempt": 0,
  • "isExternal": null,
  • "isVirtual": null,
  • "paidPrincipalAmount": null,
  • "paidInterestAmount": null,
  • "paidFeesAmount": null,
  • "paidOverAmount": null,
  • "serviceCreditDetails": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Cancel transaction

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.

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

Transaction ID. Can be Peach or lender's external identifier.

query Parameters
cancelReason
string or null (TransactionCancelReason)
Default: "canceledByUser"

Why the transaction was canceled.

Enum: "invalidPaymentMethod" "paymentMethodRemoved" "tooManyFailedAttempts" "loanFrozen" "loanAccelerated" "loanChargedOff" "loanPaidOff" "canceledByUser" "loanTermsChanged" "balanceCheckThresholdExceeded"
Responses
204

canceled

post/people/{personId}/loans/{loanId}/transactions/{transactionId}/cancel

Reverse transaction

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.

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

Transaction ID. Can be Peach or lender's external identifier.

query Parameters
sync
boolean
Default: false

Make the process synchronous.

Request Body schema: application/json
optional
status
string

The status of the reversal transaction, not the original transaction. Status may only be set for external transactions. If a status is not passed, the system will default the status to scheduled.

  • scheduled - reversal was scheduled for a future date that has not arrived yet. The reversal has not applied to a loan yet and is not included in the original transaction's effectiveAmount.
  • initiated - reversal was initiated and sent to a payment processor. The reversal is applied to a loan and impacts the original transaction's effectiveAmount. This status is used normally for ACH.
  • pending - reversal was acknowledged by the payment processor and is being processed.
Enum: "scheduled" "initiated" "pending"
scheduledDate
string <date>

The scheduled date of the reversal transaction. Can only be set for external transactions. If this value is provided, the status cannot be set to a status other than scheduled, and the system will automatically set status=scheduled if the field is not specified.

amount
number <float>

The amount of the reversal. It may be a partial or full reversal; however, the sum of all successful reversals for the same transaction may not exceed the transaction’s effectiveAmount. If amount is not provided, it will default to the effectiveAmount of the original transaction.

externalId
string [ 1 .. 50 ] characters

The external ID of the reversal transaction. This is separate from the externalId of the transaction being reversed in the request parameters.

caseId
string

The identifier of an existing case.

Responses
201

A Transaction

408

Request Timeout

423

Locked

post/people/{personId}/loans/{loanId}/transactions/{transactionId}/reverse
Request samples
application/json
{
  • "status": "scheduled",
  • "scheduledDate": "2019-08-24",
  • "amount": 0,
  • "externalId": "string",
  • "caseId": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Create transaction chargeback

In some cases a borrower might chargeback/dispute a payment that they made in the past. Only transactions in succeeded status can be charged back.

If the payment/transaction isExternal=true, the caller can post chargeback in two ways:

  1. Update status of the transaction to inDispute or chargeback directly. The chargeback amount defaults to the full amount of the transaction. The system will create a chargeback object automatically. This option is the easiest way to tell the system about a chargeback.
  2. Create chargeback(s) via Create transaction chargeback endpoint. This option allows the caller to provide more details about the chargeback. This option should be used for multiple partial chargebacks. Keep in mind that a transaction can have multiple chargebacks and reversals.

It's important to not mix the options above because it can create edge cases and confusion.

If the payment/transaction is isExternal=false, the caller cannot change the transaction status to inDispute or chargeback nor create chargeback(s) via Create transaction chargeback endpoint. Chargebacks will be received directly from the payment processor.

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.

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

Transaction ID. Can be Peach or lender's external identifier.

query Parameters
sync
boolean
Default: false

Make the process synchronous.

Request Body schema: application/json
status
string (ChargebackStatus)
Default: "open"

The status of the chargeback.

  • open - the chargeback was opened and is currently in dispute. The system assumes that the chargeback amount is temporarily taken and the effectiveAmount of the transaction is reduced by the chargeback amount. This might trigger a replay.
  • closed - the chargeback dispute period has closed, and the chargeback has been upheld. This is a terminal state and the chargeback cannot be reopened. The system assumes that the chargeback amount is permanently taken and the effectiveAmount of the transaction is reduced.
  • reversed - the chargeback dispute period has closed, and the chargeback has been reversed. The system assumes that the chargeback amount is permanently returned and the effectiveAmount of the transaction is increased back. This might trigger a replay.

The chargeback status impacts the transaction status is the following way:

For a transaction with a single chargeback, the chargeback status dictates the transaction status:

  • chargebackstatus:open → transaction status:inDispute
  • chargebackstatus:closed → transaction status:chargeback
  • chargebackstatus:reversed → transaction status:succeeded

For a transaction with multiple chargebacks, the following logic applied:

  • Any of the chargebacks in status:open → transaction status:inDispute
  • No chargebacks are in status:open, and any chargebacks are in status:closed → transaction status:chargeback
  • All chargebacks are in status:reversed→ transaction status:succeeded
Enum: "open" "closed" "reversed"
amount
number <float>

The amount of the chargeback. If a value is not provided the system would set the amount to actualAmount of the transaction. If partial chargeback(s) were processed in the past, the caller must provide the amount, otherwise the call would fail. Amount provided must be less than or equal to the effectiveAmount of the transaction at the time of the call.

caseId
string

The identifier of an existing case.

externalId
string

The lender's identifer of the chargeback

externalCaseNumber
string

The external case number of the chargeback in the payment processor system.

reasonCode
string

The reason code as received from the payment processor.

category
string

The chargeback category as received from the payment processor.

Responses
201

Chargeback

408

Request Timeout

post/people/{personId}/loans/{loanId}/transactions/{transactionId}/chargebacks
Request samples
application/json
{
  • "status": "open",
  • "amount": 0,
  • "caseId": "string",
  • "externalId": "string",
  • "externalCaseNumber": "string",
  • "reasonCode": "string",
  • "category": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Get transaction chargebacks

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.

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

Transaction ID. Can be Peach or lender's external identifier.

Responses
200

Chargebacks

get/people/{personId}/loans/{loanId}/transactions/{transactionId}/chargebacks
Response samples
application/json
{
  • "data": [
    ]
}

Get chargeback 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.

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

Transaction ID. Can be Peach or lender's external identifier.

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

Chargeback ID. Can be Peach or lender's external identifier.

Responses
200

Chargeback

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

Update chargeback

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.

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

Transaction ID. Can be Peach or lender's external identifier.

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

Chargeback ID. Can be Peach or lender's external identifier.

query Parameters
sync
boolean
Default: false

Make the process synchronous.

Request Body schema: application/json
caseId
string

The identifier of an existing case.

status
string (ChargebackStatus)
Default: "open"

The status of the chargeback.

  • open - the chargeback was opened and is currently in dispute. The system assumes that the chargeback amount is temporarily taken and the effectiveAmount of the transaction is reduced by the chargeback amount. This might trigger a replay.
  • closed - the chargeback dispute period has closed, and the chargeback has been upheld. This is a terminal state and the chargeback cannot be reopened. The system assumes that the chargeback amount is permanently taken and the effectiveAmount of the transaction is reduced.
  • reversed - the chargeback dispute period has closed, and the chargeback has been reversed. The system assumes that the chargeback amount is permanently returned and the effectiveAmount of the transaction is increased back. This might trigger a replay.

The chargeback status impacts the transaction status is the following way:

For a transaction with a single chargeback, the chargeback status dictates the transaction status:

  • chargebackstatus:open → transaction status:inDispute
  • chargebackstatus:closed → transaction status:chargeback
  • chargebackstatus:reversed → transaction status:succeeded

For a transaction with multiple chargebacks, the following logic applied:

  • Any of the chargebacks in status:open → transaction status:inDispute
  • No chargebacks are in status:open, and any chargebacks are in status:closed → transaction status:chargeback
  • All chargebacks are in status:reversed→ transaction status:succeeded
Enum: "open" "closed" "reversed"
amount
number <float>

The amount of the chargeback. Defaults to the actualAmount of the transaction.

description
string

The description of the chargeback as received from the payment processor.

externalCaseNumber
string

The external case number of the chargeback in the payment processor system.

reasonCode
string

The reason code as received from the payment processor.

category
string

The chargeback category as received from the payment processor.

Responses
200

Chargeback

put/people/{personId}/loans/{loanId}/transactions/{transactionId}/chargebacks/{chargebackId}
Request samples
application/json
{
  • "caseId": "string",
  • "status": "open",
  • "amount": 0,
  • "description": "string",
  • "externalCaseNumber": "string",
  • "reasonCode": "string",
  • "category": "string"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Backdate transaction

Backdate a transaction. Can only be applied to transactions with status=succeeded or status=pending. Can be applied to payments or service credits.

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.

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

Transaction ID. Can be Peach or lender's external identifier.

query Parameters
sync
boolean
Default: false

Make the process synchronous.

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

New effective date for the transaction.

object

The effective time of day on effectiveDate in the product timezone. If the time of day is not provided, the Peach system will set the time of day based on the following logic:

  • If backdated to the loan activation date, the system will set the timestamp to the activation timestamp plus a few seconds.
  • If backdated to a loan non-activation date, the system will set the timestamp to a few minutes after the loan accrued interest on the effectiveDate.
caseId
string

The identifier of an existing case.

Responses
200

Backdated

408

Request Timeout

423

Locked

post/people/{personId}/loans/{loanId}/transactions/{transactionId}/backdate
Request samples
application/json
{
  • "effectiveDate": "2019-08-24",
  • "effectiveTimeOfDay": {
    },
  • "caseId": "string"
}
Response samples
application/json
{
  • "message": "Loan is locked for updates. Please try again."
}