Line of Credit Migration

Create past periods data

Creates past periods in preparation for migration.

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
required
Array of objects (PastPeriodWithRequireds)
Responses
201

Success

post/people/{personId}/loans/{loanId}/migration/past-periods
Request samples
application/json
{
  • "pastPeriods": [
    ]
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": [
    ]
}

Update past period data

Updates past period in preparation for migration.

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
dueDate
required
string <date>

The due date of the period. The system will update the object corresponding to the period with a due date equal to dueDate. If no matching period is found, the system will not make any updates.

Request Body schema: application/json
required
id
string
createdAt
string <date-time>
updatedAt
string or null <date-time>
deletedAt
string or null <date-time>
startDate
string <date>

The period start date. The start date is inclusive.

endDate
string <date>

The period end date. The end date is inclusive.

statementDate
string <date>

The date when a statement for the period was created or should be created in the future.

dueDate
string <date>

The period's payment due date.

object or null
object (schemas-Statement)
Responses
200

Success

put/people/{personId}/loans/{loanId}/migration/past-periods
Request samples
application/json
{
  • "id": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "statementDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "gracePeriod": {
    },
  • "statement": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Delete past period data

Deletes past period in preparation for migration.

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
dueDate
required
string <date>

The due date of the period. The system will delete the object corresponding to the period with a due date equal to dueDate. If no matching period is found, the system will not make any updates.

Responses
204

Success no content

delete/people/{personId}/loans/{loanId}/migration/past-periods

Get past period data

Get past period in preparation for migration.

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
dueDate
string <date>

The due date of the period. The system will return the object corresponding to the period with due date equal to dueDate. If no matching period is found, the system will return no results.

startingAfter
string

Return results starting after the provided object identifier.

endingBefore
string

Return results ending before the provided object identifier.

reportingToAgency
string

Filters to only loan types set up to report to this agency.

Enum: "experian" "equifax" "transUnion" "innovis"
Responses
200

Past period data

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

Get migration period LOC data

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

Migration period LOC data

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

Update migration period LOC data

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
postMigrationLoanStatus
string
Default: "active"

The status of the line after a successful migration. If you pass accelerated or chargedOff, the system will first migrate the line as "active" and then immediately accelerate or charge off the line and its draws. The effectiveDate of the acceleration or charge off will be equal to the "migration cutoff date".

Enum: "active" "accelerated" "chargedOff"
postMigrationLoanChargedOffReason
string or null

The reason for the line charge off. Only required if migrationStatus=chargedOff.

  • term means the loan was charged off per loan type configuration after X days overdue.
  • fraudulent means the loan was charged off for a 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"
object (MigrationPeriod)

The migration period. The "migration cutoff date" will be set to the statementDate passed here.

If there are any fees with chargeDate after the "migration cutoff date", these will be canceled if the migrationPeriod data is updated before migration.

object (MigrationObligation)
object (MigrationGracePeriod)
object (LOCMigrationBalances)

Only fees can go inside the balance objects on LOC.

object
Responses
200

Migration period LOC data

put/people/{personId}/loans/{loanId}/migration/period
Request samples
application/json
{
  • "postMigrationLoanStatus": "active",
  • "postMigrationLoanChargedOffReason": "term",
  • "migrationPeriod": {
    },
  • "obligation": {
    },
  • "gracePeriod": {
    },
  • "balances": {
    },
  • "statement": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Create migration period LOC data

Creates migration period in preparation for migration.

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
postMigrationLoanStatus
string
Default: "active"

The status of the line after a successful migration. If you pass accelerated or chargedOff, the system will first migrate the line as "active" and then immediately accelerate or charge off the line and its draws. The effectiveDate of the acceleration or charge off will be equal to the "migration cutoff date".

Enum: "active" "accelerated" "chargedOff"
postMigrationLoanChargedOffReason
string or null

The reason for the line charge off. Only required if migrationStatus=chargedOff.

  • term means the loan was charged off per loan type configuration after X days overdue.
  • fraudulent means the loan was charged off for a 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"
required
object (MigrationPeriod)

The migration period. The "migration cutoff date" will be set to the statementDate passed here.

If there are any fees with chargeDate after the "migration cutoff date", these will be canceled if the migrationPeriod data is updated before migration.

required
object (MigrationObligation)
required
object (MigrationGracePeriod)
required
object (LOCMigrationBalances)

Only fees can go inside the balance objects on LOC.

object
Responses
201

Migration period LOC data

post/people/{personId}/loans/{loanId}/migration/period
Request samples
application/json
{
  • "postMigrationLoanStatus": "active",
  • "postMigrationLoanChargedOffReason": "term",
  • "migrationPeriod": {
    },
  • "obligation": {
    },
  • "gracePeriod": {
    },
  • "balances": {
    },
  • "statement": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Get migration period draw data

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.

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

The draw identifier.

Responses
200

Migration period draw data

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

Update migration period draw data

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.

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

The draw identifier.

Request Body schema: application/json
required
object (BaseMigrationObligation)
object (MigrationGracePeriod)
object (DrawMigrationBalances)

The "migration cutoff date" is the statement date of the migration period, which means that we expect balances to include interest FOR the last date of the applicable period (aka end date) but not for the statement date (which is also the first day of the next period). For example:

  • Period start date: Sep 5, 2023
  • Period end date: Oct 4, 2023
  • Statement date: Oct 5, 2023 (also first day of the next period)
  • Period due date: Oct 25, 2023
  • Migration cutoff date: Oct 5, 2023
  • End of day principal balance on Oct 4, 2023: $100.00
  • The line/draw accrues daily simple interest of 18% annually (with 360 method)
  • The balances passed to Peach should include the daily interest that was accrued at the end of Oct 4, 2023:
    • $100.00 * (0.18 / 360) = $0.05
  • Peach system will accrue daily interest for the end of Oct 5, 2023 day balance and onward
Responses
200

Migration period draw data

put/people/{personId}/loans/{loanId}/draws/{drawId}/migration/period
Request samples
application/json
{
  • "obligation": {
    },
  • "gracePeriod": {
    },
  • "balances": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Create migration period draw data

Creates migration draw data in preparation for migration.

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.

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

The draw identifier.

Request Body schema: application/json
required
required
object (BaseMigrationObligation)
required
object (MigrationGracePeriod)
required
object (DrawMigrationBalances)

The "migration cutoff date" is the statement date of the migration period, which means that we expect balances to include interest FOR the last date of the applicable period (aka end date) but not for the statement date (which is also the first day of the next period). For example:

  • Period start date: Sep 5, 2023
  • Period end date: Oct 4, 2023
  • Statement date: Oct 5, 2023 (also first day of the next period)
  • Period due date: Oct 25, 2023
  • Migration cutoff date: Oct 5, 2023
  • End of day principal balance on Oct 4, 2023: $100.00
  • The line/draw accrues daily simple interest of 18% annually (with 360 method)
  • The balances passed to Peach should include the daily interest that was accrued at the end of Oct 4, 2023:
    • $100.00 * (0.18 / 360) = $0.05
  • Peach system will accrue daily interest for the end of Oct 5, 2023 day balance and onward
Responses
201

Migration period draw data

post/people/{personId}/loans/{loanId}/draws/{drawId}/migration/period
Request samples
application/json
{
  • "obligation": {
    },
  • "gracePeriod": {
    },
  • "balances": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Create past transaction

Creates past transaction in preparation for line of credit migration.

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
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"
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.

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

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

Peach's unique or lender's external identifier.

status
required
string (PastTransactionCreationStatus)

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.

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: "initiated" "pending" "succeeded" "failed" "canceled" "inDispute" "chargeback"
effectiveDate
required
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.

required
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.

object

Payment instrument details are only allowed to be passed for migrated lines of credit. This allows you to create transactions without the need to create a payment instrument object first. If the paymentInstrumentDetails is passed, the system will not require paymentInstrumentId. Instead, the system will automatically create a payment instrument behind the scenes. The instrument will be created as instrumentType=paymentNetwork and mainly used to be displayed in the Borrower Portal or an App. The instrument cannot be used for any future transactions after the migration.

object

Transaction migration related details. This object:

  • Can be used only for transactions with an effective date before the "migration cutoff date".
  • Can be used for lines that are migrated from another system to Peach. Don't use it for installment loan migration.
  • Allows you to pass details on how a transaction was applied/allocated to draws.

For example:

Line of credit had three draws prior to the "migration cutoff date". Balances of draws were:

  • Draw A: $650
  • Draw B: $70
  • Draw B: $0

A payment of $120 was processed. Using this object you can tell the system that $120 was waterfalled/allocated as following:

  • Draw A split: $70
  • Draw B split: $50
  • Draw A split: $0

If you don't pass the migration object, then you won't be able to make the following status changes after the "migration cutoff date": pendingfailed succeededfailed

Responses
201

Created

post/people/{personId}/loans/{loanId}/migration/past-transaction
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",
  • "externalId": "string",
  • "failureReason": "insufficientFunds",
  • "paymentInstrumentId": "string",
  • "amount": 0,
  • "evidenceDocumentId": "string",
  • "status": "initiated",
  • "effectiveDate": "2019-08-24",
  • "effectiveTimeOfDay": {
    },
  • "paymentInstrumentDetails": {
    },
  • "migration": {
    }
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

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

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

Success

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

Update past transaction

Update past transaction in preparation for line of credit migration.

Note: After migration, you should call the "Update transaction" endpoint.

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.

Request Body schema: application/json
required
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.

object

Payment instrument details are only allowed to be passed for migrated lines of credit. This allows you to create transactions without the need to create a payment instrument object first. If the paymentInstrumentDetails is passed, the system will not require paymentInstrumentId. Instead, the system will automatically create a payment instrument behind the scenes. The instrument will be created as instrumentType=paymentNetwork and mainly used to be displayed in the Borrower Portal or an App. The instrument cannot be used for any future transactions after the migration.

object

Transaction migration related details. This object:

  • Can be used only for transactions with an effective date before the "migration cutoff date".
  • Can be used for lines that are migrated from another system to Peach. Don't use it for installment loan migration.
  • Allows you to pass details on how a transaction was applied/allocated to draws.

For example:

Line of credit had three draws prior to the "migration cutoff date". Balances of draws were:

  • Draw A: $650
  • Draw B: $70
  • Draw B: $0

A payment of $120 was processed. Using this object you can tell the system that $120 was waterfalled/allocated as following:

  • Draw A split: $70
  • Draw B split: $50
  • Draw A split: $0

If you don't pass the migration object, then you won't be able to make the following status changes after the "migration cutoff date": pendingfailed succeededfailed

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.

amount
number <float> >= 0

The amount of the payment.

status
string (PastTransactionCreationStatus)

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.

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: "initiated" "pending" "succeeded" "failed" "canceled" "inDispute" "chargeback"
failureReason
string (TransactionFailureReason)

The transaction failure reason.

Enum: "insufficientFunds" "chargeback" "accountClosed" "invalidAccount" "unknownReason" "invalidCvv" "invalidExpirationDate" "avsFailed" "networkError" "cardDeclined" "accountFrozen" "deceased" "invalidRouting" "paymentStopped" "microdepositsFailed" "microdepositsAttemptFailed" "incorrectNumber" "fraudulent" "unauthorizedDebit"
Responses
200

Success

put/people/{personId}/loans/{loanId}/migration/past-transaction/{transactionId}
Request samples
application/json
{
  • "effectiveDate": "2019-08-24",
  • "effectiveTimeOfDay": {
    },
  • "paymentInstrumentDetails": {
    },
  • "migration": {
    },
  • "externalId": "string",
  • "amount": 0,
  • "status": "initiated",
  • "failureReason": "insufficientFunds"
}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}

Get past 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}/migration/past-transaction/{transactionId}
Response samples
application/json
{
  • "status": 0,
  • "message": "string",
  • "data": {
    }
}