# Get supercase bulk operation by ID

Endpoint: GET /supercases/{supercaseId}/bulk-operations/{supercaseBulkOperationId}
Version: 2025-03-26
Security: oauth2, bearerAuth, apiKeyHeader

## Path parameters:

  - `supercaseId` (string, required)
    The ID of the supercase

  - `supercaseBulkOperationId` (string, required)
    Supercase bulk operation ID

## Query parameters:

  - `searchable` (boolean)
    If `true`, format the entire response as one suitable for an ElasticSearch search index.

## Response 200 fields (application/json):

  - `firstInteraction` (object)

  - `noteId` (string)

  - `operationType` (string)
    The different types of bulk operations.
    Enum: "update"

  - `requestBody` (object)

  - `requestBody.anticipatedCaseCompletionDate` (string)
    In a bankruptcy chapter that leverages a reorganization and a new
payment plan (i.e. Chapter 13), record when the last payment is
expected to be received. This will trigger reminders to close out
the case.

  - `requestBody.caseType` (string)
    Enum: "bankruptcy"

  - `requestBody.courtCaseChapter` (string)
    The bankruptcy chapter code. One of four common types we support at
this time.
    Enum: "chapter7", "chapter11", "chapter12", "chapter13", "unknown"

  - `requestBody.courtCaseClosedDate` (string)
    Date the bankruptcy case closed, and the case is no longer on the court docket.

  - `requestBody.courtCaseDebtorDisposition` (string)
    The outcome of the bankruptcy case decided by the court.
    Enum: "dismissed", "discharged", "reinstated"

  - `requestBody.courtCaseDebtorDispositionDate` (string)
    Date on which the disposition was decided by the court.

  - `requestBody.courtCaseFiledDate` (string)
    The bankruptcy court filing date. This is also when 'automatic stay'
is invoked and creditors must stop calling borrowers or making
attempts to collect on his or her debt.

  - `requestBody.courtCaseLastStatus` (string)
    The latest-reported bankruptcy case status, not case outcome, as it
appears in the court.
    Enum: "filed", "dismissed", "discharged", "conversion", "reinstated", "closedFiledInError", "closedTransferredOut", "closedDischargeNA", "closedUndeterminedReason"

  - `requestBody.courtCaseLastStatusUpdatedDate` (string)
    Date on which the latest status of the bankruptcy case was updated.

  - `requestBody.courtCaseNumber` (string)
    The unique identifier the courts use during the filing and review of
the bankruptcy.

  - `requestBody.creditorClaimDeadlineDate` (string)
    The date a lender has to file a claim to be eligible for any bankruptcy proceeds.

  - `requestBody.listedOutstandingDebt` (boolean)
    When a bankruptcy is filed, the borrower lists all the creditors/loans
he/she knows to be outstanding. Sometimes he/she may forget to list
a loan/creditor, in which case the creditor may want to file a claim
to ensure that the loan is added to the list of accounts to include
in the bankruptcy.

  - `requestBody.interactionId` (integer)
    ID for the interaction that resulted in the case being opened

  - `requestBody.noticeReceivedDate` (string)
    The written notification date, or oral notice as mandated by each state, of the cease communications. This is when the legal timeline begins.

  - `requestBody.dateOfBirth` (string)
    The date of birth as reported by the data source.
Returned as `null` for callers lacking the `person:read.pii` permission.

  - `requestBody.dateOfDeath` (string)
    The date of death as reported by the data source.

  - `requestBody.dateOfDeathByAgent` (string)
    The date of death as recorded by the agent.

  - `requestBody.deceasedAddress` (object)
    The mailing address.

  - `requestBody.deceasedAddress.POBox` (string)
    Post Office Box

  - `requestBody.deceasedAddress.addressLine1` (string)
    Address line 1.
If `company.allowPartialAddress=false`, then this field is required, else it is not required

  - `requestBody.deceasedAddress.addressLine2` (string)
    Address line 2.

  - `requestBody.deceasedAddress.city` (string)
    City.

  - `requestBody.deceasedAddress.country` (string, required)
    Country. English short name according to
[ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard.

  - `requestBody.deceasedAddress.countyOrRegion` (string)
    County or region.

  - `requestBody.deceasedAddress.object` (string)
    Enum: "address"

  - `requestBody.deceasedAddress.postalCode` (string, required)
    Postal code. Also known as ZIP code.

  - `requestBody.deceasedAddress.state` (string)
    State/Province. This is a required field if the country is US or CA.

  - `requestBody.deceasedAddress.timezone` (string)
    Timezone for the address.

  - `requestBody.deceasedName` (object)
    Name of the person.

  - `requestBody.deceasedName.createdAt` (string)

  - `requestBody.deceasedName.current` (boolean)
    Name is flagged as current.

  - `requestBody.deceasedName.deletedAt` (string)

  - `requestBody.deceasedName.effectiveAt` (string)

  - `requestBody.deceasedName.firstName` (string, required)
    A person's first name.

  - `requestBody.deceasedName.id` (string)

  - `requestBody.deceasedName.lastName` (string, required)
    A person's last name.
Redacted to the first initial (e.g. `S.`) for callers lacking the
`person:read.pii` permission.

  - `requestBody.deceasedName.maidenLastName` (string)
    A person's maiden name, if applicable.
Redacted to the first initial (e.g. `J.`) for callers lacking the
`person:read.pii` permission.

  - `requestBody.deceasedName.middleName` (string)
    A person's middle name.
Redacted to the first initial (e.g. `A.`) for callers lacking the
`person:read.pii` permission.

  - `requestBody.deceasedName.object` (string)
    Enum: "name"

  - `requestBody.deceasedName.originalValue` (object)
    The original value for name before an update.

  - `requestBody.deceasedName.preferredFirstName` (string)
    A person's preferred first name. This name will be used for interactions
like emails, text messages, outbound calls, online portal, etc.
If no preferred name is provided, `firstName` will be used.

  - `requestBody.deceasedName.prefix` (string)
    A person's name prefix.

  - `requestBody.deceasedName.source` (string)
    Enum: "peach", "lender", "externalAPI"

  - `requestBody.deceasedName.status` (string)
    Enum: "active", "inactive"

  - `requestBody.deceasedName.suffix` (string)
    A person's name suffix.

  - `requestBody.deceasedName.updatedAt` (string)

  - `requestBody.deceasedNoticeReceivedDate` (string)
    The date we became aware of the consumer's death. This is not the date of death.
This notice is received from our internal system.

  - `requestBody.deceasedNoticeReceivedDateByAgent` (string)
    The date you became aware of the consumer's death. This is not the date of death.

  - `requestBody.exactDateOfDeathUnknown` (boolean)
    In some cases, the exact date of death is unknown. When `exactDateOfDeathUnknown` is true, the `dateOfDeath` is only accurate to the month and year specified.

  - `requestBody.redactedFields` (array)
    Paths of fields on this object whose values were hidden because your credentials lack the `person:read.pii` permission. Always present on responses that can carry personal data — an empty array means nothing was hidden. Paths are relative to this object. Objects nested inside this one, including every element of an array of objects, carry their own list rather than appearing here. A path ending in `[]` is an array of plain values such as `selfEmails[]`, and means at least one element of that array was hidden — not necessarily all of them. This field is never accepted on requests.
    Example: ["name.lastName","dateOfBirth"]

  - `requestBody.representativeOfEstateContact` (object)

  - `requestBody.representativeOfEstateContact.phoneDisconnectionDetails` (object)

  - `requestBody.representativeOfEstateContact.phoneDisconnectionDetails.disconnectionStatus` (any)

  - `requestBody.representativeOfEstateContact.phoneDisconnectionDetails.lastDisconnectCheckDate` (any)

  - `requestBody.representativeOfEstateContactId` (string)
    Decedent account holder's contact ID. It can be a legal representative,
or an appointed representative by the deceased.

  - `requestBody.disputeConfirmedReason` (string)
    The dispute confirmed reason is only used when a case is confirmed as disputed.
    Enum: "APR", "outstandingBalance", "monthlyBalance", "incorrectAtCreditBureau", "other"

  - `requestBody.disputeNotice` (string)
    ID for the interaction that resulted in the dispute case being opened

  - `requestBody.noticeReceivedDate` (string)
    The first time a Direct Dispute Notice was received from the borrower.
This is when the legal timeline begins.

  - `requestBody.reasonForDispute` (string)
    The reason for the dispute of debt.
    Enum: "inaccurateOrIncompleteDetails", "loanAlreadyPaidInFull", "missingCreditedPayments", "fundsNeverReceived", "coercedDebt", "other"

  - `requestBody.scopeOfDispute` (string)
    Scope of the dispute.
    Enum: "entireLoan", "remainingLoanAmount", "interestRate", "fees", "otherTerms"

  - `requestBody.disaster` (object)

  - `requestBody.disaster.declarationDate` (string)
    Date the disaster was declared.

  - `requestBody.disaster.declaredCountyArea` (string)
    The name or phrase describing the U.S. county that was
included in the declaration.

  - `requestBody.disaster.disasterCloseOutDate` (string)
    Date all financial transactions for all programs are completed.

  - `requestBody.disaster.disasterNumber` (integer)
    Sequentially assigned number used to designate an event or incident
declared as a disaster. For more information on the disaster
process, www.fema.gov.

  - `requestBody.disaster.disasterType` (string)
    Two character code that defines if the disaster is a Major Disaster
Declaration (DR), Emergency Declaration (EM), Fire Management
Assistance Declaration (FM), or Fire Suppression Authorization (FS).
For more information on the disaster process,
please visit: www.fema.gov.

  - `requestBody.disaster.femaId` (string)

  - `requestBody.disaster.fyDeclared` (integer)
    The fiscal year the disaster was declared.

  - `requestBody.disaster.hmProgramDeclared` (boolean)
    Denotes whether the Hazard Mitigation program was declared for this
disaster. For more information on the program,
please visit: www.fema.gov.

  - `requestBody.disaster.iaProgramDeclared` (boolean)
    Denotes whether the Individual Assistance program was declared
for this disaster. For more information on the program,
please visit: www.fema.gov.

  - `requestBody.disaster.ihProgramDeclared` (boolean)
    Denotes whether the Individuals and Households program was declared
for this disaster. For more information on the program,
please visit: www.fema.gov.

  - `requestBody.disaster.incidentBeginDate` (string)
    Date the incident itself began.

  - `requestBody.disaster.incidentEndDate` (string)
    Date the incident itself ended.

  - `requestBody.disaster.incidentType` (string)
    Type of incident such as fire or flood. The incident type will
affect the types of assistance available. For more information on
incident types, please visit: www.fema.gov.

  - `requestBody.disaster.lastRefresh` (string)
    Date the record was last updated in the FEMA API data store.

  - `requestBody.disaster.paProgramDeclared` (boolean)
    Denotes whether the Public Assistance program was declared for this
disaster. For more information on the program,
please visit: www.fema.gov.

  - `requestBody.disaster.placeCode` (string)
    A unique code system FEMA uses internally to recognize
locations that takes the numbers "99" + the 3-digit county
FIPS code. There are some declared locations that don't have
recognized FIPS county codes in which case we assigned a
unique identifier.
We map person's home zip code to FIPS code.

  - `requestBody.disaster.stateCode` (string)
    The name or phrase describing the U.S. state, district, or territory.

  - `requestBody.claimRejectedReason` (string)
    The rejected claim reason is only used when a case is deemed
'not validated.' Only one reason is associated with a set of associated loans.
    Enum: "requestedInformationNotReceived", "invalidDocumentation", "insufficientDocumentation", "householdResponsible", "namedOnAccount", "other"

  - `requestBody.reportReceivedDate` (string)
    The first time an identity theft report was received from the borrower.
This is when the legal timeline begins.

  - `requestBody.legalActionInitiatedDate` (string)
    Date the legal action initiated

  - `requestBody.legalJudgmentEffectiveDate` (string)
    Legal judgment effective date

  - `requestBody.claimingSCRArights` (boolean)
    The borrower is claiming SCRA rights and protections

  - `requestBody.dutyCertificateFile` (string)
    The unique identifier for the downloaded certificate file from monitoring service.

  - `requestBody.dutyCertificateId` (string)
    The certificate identifier used to locate a certificate in the certificate file.

  - `requestBody.dutyEndDate` (string)
    The duty end date. This is normally populated when duty ends. During ongoing duty, the
value will remain empty.

  - `requestBody.dutyServiceComponent` (string)
    DoD's classification of service positions

  - `requestBody.dutyServiceComponentDescription` (string)
    Description of DoD's classification of service positions

  - `requestBody.dutyServiceMatchDate` (string)
    The date that DMDC completed the SCRA match.

  - `requestBody.dutyStartDate` (string)
    The duty start date. This is populated when Peach gets the first hit from the SCRA database.

  - `requestBody.memberOfPennsylvaniaNationalGuard` (boolean)
    The borrower is a member of Pennsylvania National Guard.

  - `requestBody.onDutyProtectionEligibility` (string)
    The borrower's eligibility for the federal SCRA and/or state protections
    Enum: "federal", "state", "federalAndState"

  - `requestBody.currentStateResidence` (string)
    Borrower's current state of residence. Use two character US state name abbreviations.

  - `requestBody.newYorkStateCity` (string)
    If the borrower is a New York state resident, specify the city.
    Enum: "newYorkCity", "yonkers", "other"

  - `requestBody.requestDate` (string)
    Date the debt validation was requested.

  - `requestBody.attemptsToContactByPhone` (object)

  - `requestBody.attemptsToContactByPhone.attempted` (integer)
    The number of attempted case-associated phone interactions
with the borrower. Attempted statuses are those not in the
list of `scheduled`, `canceled`, `inProgress`, or
`succeeded`.

  - `requestBody.attemptsToContactByPhone.successful` (integer)
    The number of successful case-associated phone interactions
with the borrower.

  - `requestBody.collectionReachOuts` (object)

  - `requestBody.collectionReachOuts.capacities` (array)

  - `requestBody.collectionReachOuts.capacities.count` (integer)
    How many contacts were made in the last period, ending
today.

  - `requestBody.collectionReachOuts.capacities.left` (integer)
    How many contacts are left according to the intensity
configuration. `null` if this is not configured.

  - `requestBody.collectionReachOuts.capacities.period` (integer)
    The length of the time period, in days.

  - `requestBody.collectionReachOuts.contacts` (array)

  - `requestBody.collectionReachOuts.contacts.count` (integer)
    How many contacts were made on the given day.

  - `requestBody.collectionReachOuts.contacts.date` (string)
    The date on the contacts were made.

  - `requestBody.collectionReachOuts.intensity` (string)
    The borrower's collection intensity rate.
    Enum: "light", "normal", "heavy"

  - `requestBody.daysOverdue` (integer)
    Maximum number of days overdue among overdue or accelerated loans.

  - `requestBody.isFirstTimeCollection` (boolean)
    Indicates if this is the first time a collections case-type has
been created for this borrower. Canceled cases are not
considered.

  - `requestBody.lastSuccessfulPayment` (object)

  - `requestBody.lastSuccessfulPayment.amount` (number)
    The amount of the last successful payment (transaction).

  - `requestBody.lastSuccessfulPayment.date` (string)
    The date of the last successful payment (transaction) among overdue and accelerated loans.

  - `requestBody.loansReportedToBureaus` (string)
    Enum: "yes", "no", "some"

  - `requestBody.nextPayment` (object)
    Closest upcoming payment due of overdue and accelerated loans.

  - `requestBody.nextPayment.amount` (number)
    Upcoming payment amount.

  - `requestBody.nextPayment.date` (string)
    Upcoming payment date.

  - `requestBody.numberOfLoansOverdueOrAccelerated` (integer)
    Number of associated overdue or accelerated loans.

  - `requestBody.overdueOrAcceleratedLoanCount` (integer)
    **DEPRECATED ATTRIBUTE** Use `numberOfLoansOverdueOrAccelerated`.
Number of associated overdue or accelerated loans.

  - `requestBody.paymentCount` (object)
    **DEPRECATED ATTRIBUTE** Use `paymentCounts`.

  - `requestBody.paymentCount.failed` (integer)
    The number of failed payments (transactions) among overdue and accelerated loans.

  - `requestBody.paymentCount.total` (integer)
    The total number of payment attempts (transactions) among overdue and accelerated loans.

  - `requestBody.paymentCounts` (object)

  - `requestBody.paymentCounts.failed` (integer)
    The number of failed payments (transactions) among overdue and accelerated loans.

  - `requestBody.paymentCounts.total` (integer)
    The total number of payment attempts (transactions) among overdue and accelerated loans.

  - `requestBody.totalAmounts` (object)

  - `requestBody.totalAmounts.expected` (number)
    Total amount expected to be paid on overdue and accelerated loans.

  - `requestBody.totalAmounts.overdue` (number)
    Total amount overdue on overdue or accelerated loans.

  - `requestBody.totalAmounts.paid` (number)
    Total amount paid on overdue and accelerated loans.

  - `requestBody.ofacActionsRequired` (array)
    The list of standard punitive actions.

  - `requestBody.ofacActionsRequiredOther` (string)
    Additional punitive actions.

  - `requestBody.sdnAddressList` (array)
    List of addresses.

  - `requestBody.sdnAddressList.address` (string)
    The address.

  - `requestBody.sdnAddressList.cityStateProvincePostalCode` (string)
    City, state, province, or postal code.

  - `requestBody.sdnAddressList.country` (string)
    The country.

  - `requestBody.sdnAkaList` (array)
    List of AKA's, in the format of "LASTNAME, Firstname".

  - `requestBody.sdnDateOfBirthList` (array)
    Dates of birth. The date may be partial. For example: 10 Dec 1948 or 1959.

  - `requestBody.sdnName` (object)
    Name of the Specially Designated National.

  - `requestBody.sdnName.firstName` (string)

  - `requestBody.sdnName.lastName` (string)

  - `requestBody.sdnNationalityList` (array)
    List of nationalities. For example: Tunisia.

  - `requestBody.sdnPlaceOfBirthList` (array)
    Places of birth. For example: Cuba.

  - `requestBody.sdnProgramList` (array)
    List of sanction program names. For example: SDNTK or SDGT.

  - `requestBody.sdnRemarks` (string)
    Specially Designated National remarks.

  - `requestBody.sdnUid` (string)
    Unique record identifier/unique listing identifier.

  - `requestBody.dispute` (object)

  - `requestBody.dispute.cardId` (string)
    The Peach identifier of the `Card` linked to the disputed purchase (`CD-...`).
Mirrors `Purchase.cardId` on the underlying purchase.

  - `requestBody.dispute.caseId` (string)
    Peach identifier of the case. The case object contains more details about the dispute, e.g. evidence information such as supporting documents.

  - `requestBody.dispute.companyId` (string)
    The unique company identifier.

  - `requestBody.dispute.disputedAmount` (number)
    The disputed amount. Can be less than the original purchase amount. Sum of disputed amounts cannot exceed the original purchase amounts (regardless of disputes outcomes).

  - `requestBody.dispute.repostedPurchaseId` (string)
    The identifier of the reposted purchase. When a borrower loses a dispute, the lender normally creates a new purchase in the amount of the dispute.

  - `requestBody.dispute.status` (string)
    The status of the dispute. `unsubmitted` is the only valid status for a new purchase dispute.
`unsubmitted` - The dispute is pending submission to a processor/network.
`submitted` - The dispute has been submitted to a processor/network.
`expired` - The dispute has expired.
`won` - The dispute is won.
`lost` - The dispute is lost.
`canceled` - The dispute was canceled. Only `unsubmitted` disputes can be canceled.
    Enum: "unsubmitted", "submitted", "expired", "won", "lost", "canceled"

  - `requestBody.dispute.timestamps` (object)

  - `requestBody.dispute.timestamps.expiredAt` (string)

  - `requestBody.dispute.timestamps.lostAt` (string)

  - `requestBody.dispute.timestamps.submittedAt` (string)

  - `requestBody.dispute.timestamps.wonAt` (string)

  - `requestBody.disputeReason` (string)
    The reason for filing the dispute.
`canceled` - Service or merchandise was canceled.
`serviceNotAsDescribed` - The service was not as described.
`merchandiseNotAsDescribed` - The merchandise was not as described.
`duplicate` - There were multiple copies of a charge for a single purchase, or the charge was paid by other means.
`fraudulent` - The borrower did not make the purchase.
`notReceived` - Merchandise or service was not received.
`other` - All other types of disputes.
    Enum: "canceled", "serviceNotAsDescribed", "merchandiseNotAsDescribed", "duplicate", "fraudulent", "notReceived", "other"

  - `requestBody.disputeStatus` (string)
    **DEPRECATED ATTRIBUTE** Use `dispute.status`.
    Enum: "unsubmitted", "submitted", "expired", "won", "lost"

  - `requestBody.evidenceDetails` (any)

  - `requestBody.evidenceDetails.cancelPolicyProvided` (boolean)
    Whether the borrower was provided with a cancellation policy by the merchant.

  - `requestBody.evidenceDetails.cancelReason` (string)
    Reason for canceling the order.

  - `requestBody.evidenceDetails.canceledDate` (string)
    Date when the order was canceled.

  - `requestBody.evidenceDetails.expectedDate` (string)
    Date the borrower expected to receive the order.

  - `requestBody.evidenceDetails.productDescription` (string)
    Description of the merchandise or service that was purchased.

  - `requestBody.evidenceDetails.productType` (string)
    Type of product purchased.
`merchandise` - Tangible goods such as appliances.
`service` - Intangible goods such as ski lessons or internet subscription.
    Enum: "merchandise", "service"

  - `requestBody.evidenceDetails.returnStatus` (string)
    Result of borrower's attempt to return the product.
`succeeded` - The merchant accepted the return.
`merchantRejected` - The merchant rejected the return.
    Enum: "succeeded", "merchantRejected"

  - `requestBody.evidenceDetails.returnedDate` (string)
    Date when the order was returned or attempted to be returned.

  - `requestBody.evidenceDetails.cardStatementDocumentId` (string)
    Copy of the card statement showing that the product had already been paid for.

  - `requestBody.evidenceDetails.cashReceiptDocumentId` (string)
    Copy of the receipt showing that the product had been paid for in cash.

  - `requestBody.evidenceDetails.checkImageDocumentId` (string)
    Image of the front and back of the check that was used to pay for the product.

  - `requestBody.evidenceDetails.originalPurchaseExternalId` (string)
    External Purchase identifier that the disputed purchase is a duplicate of. If the two or more purchases that are copies of each other (aka have exact same details), this is the original undisputed one.

  - `requestBody.evidenceDetails.receivedDate` (string)
    Date when the product was received.

  - `requestBody.evidenceDetails.returnDescription` (string)
    Description of the borrower's attempt to return the product.

  - `requestBody.evidenceDocumentId` (string)
    Additional document supporting the dispute.

  - `requestBody.evidenceExplanation` (string)
    Description of why the borrower disputes the purchase.

  - `requestBody.purchase` (object)

  - `requestBody.purchase.amount` (number, required)
    The amount of the purchase. The amount can be updated only if the purchase status is `pending` or `authorized`. The amount and status of a purchase may be changed on the same call.

  - `requestBody.purchase.authorizationPurchaseId` (string)
    Peach's unique (or lender's external identifier) for the authorization purchase. This attribute is used to reference an initial authorization, so
lenders know which captures (purchase object(s) in Peach) are related to the original authorization.

  - `requestBody.purchase.cardId` (string)
    Peach id, Peach public id (`CD-...`), or lender external id (`ext-...`) of the card used for this purchase.
Resolved against cards belonging to this line of credit. If the card cannot be resolved (unknown id or wrong loan),
the purchase is still created and `validation.cardIdMissing` is set to `true` in the response.
In responses from read endpoints, this field is always returned as the Peach public id (`CD-...`) or `null`.

  - `requestBody.purchase.declineReason` (object)
    The reason the purchase was declined

  - `requestBody.purchase.declineReason.mainExternalReasonCode` (string)
    The external decline reason code

  - `requestBody.purchase.declineReason.mainScriptForRep` (string)
    The main decline reason script that a customer service agent can provide to the borrower.

  - `requestBody.purchase.declineReason.mainText` (string)
    The main decline reason text that is shown to the borrower

  - `requestBody.purchase.displayId` (string)
    The purchase ID to show in the UI (Peach public or external).

  - `requestBody.purchase.drawId` (string)
    The unique identifier of the draw that the purchase belongs to.

  - `requestBody.purchase.eligibleDisputeAmount` (number)
    The maximum amount eligible to be disputed. The amount is dynamic and can change depending on past disputes. Sum of disputed amounts cannot exceed the original purchase amounts (regardless of disputes outcomes).

  - `requestBody.purchase.externalId` (string)
    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: "ABCDE", ... }` in the request body.

  - `requestBody.purchase.id` (string)
    The unique identifier of the purchase.

  - `requestBody.purchase.lineOfCreditId` (string)
    The unique identifier of the line of credit that the purchase belongs to.

  - `requestBody.purchase.metadata` (object)
    Store any type of key/value pairs in the form of a JSON dictionary.

  - `requestBody.purchase.migration` (object)
    Purchase migration related details. This object should be used for lines that are migrated from another system to Peach.

  - `requestBody.purchase.migration.originalDrawId` (string, required)
    The draw identifier. Can be Peach or lender's external identifier.
All past purchases prior to the "migration cutoff date" will be posted on the "migration" draw. After the "migration cutoff date",
a lender can have multiple draws (e.g. Purchases, Cash Withdrawals, etc.) Use this attribute to indicate the original draw ID
that the purchase was posted on in another system. In case of a dispute created after the "migration cutoff date", the `originalDrawId`
will be used to adjust the draw balance. The `originalDrawId` is required for all purchases that are migrated from another system.

  - `requestBody.purchase.originalAmount` (number)
    The original amount of the purchase when it was created. If the purchase amount changes after creation, `originalAmount` will not change.

  - `requestBody.purchase.purchaseDate` (string)
    The date of a purchase. This attribute can be passed only during the line of credit migration process.
Don't use this attribute after the migration process was successfully completed.
- The value must be before or equal to today, and cannot be greater than the "migration at date" (aka the actual date on which you run the migration.)
- If you pass `purchaseDate` you cannot pass `authorizedAt` and/or `effectiveAt`.
- If `purchaseDate` is passed, the system will set `authorizedAt` and `effectiveAt` to `purchaseDate` at 6:00 AM in the product timezone.
- If you `purchaseDate` is not passed, you must pass both `authorizedAt` and `effectiveAt`. `authorizedAt` cannot be greater than `effectiveAt`.

For non-migrated purchases:
- The value is equal to the date part of the `authorizedAt` converted to the product timezone (e.g. Eastern or Pacific).
If `authorizedAt` is null, this value is equal to the date part of the purchase's `createdAt` converted to the product timezone.

The `purchaseDate` is returned in Get endpoints for both migrated and non-migrated purchases.

  - `requestBody.purchase.purchaseDetails` (object)
    The details of purchase.

  - `requestBody.purchase.purchaseDetails.categoryId` (string)
    The category identifier of the purchase.

  - `requestBody.purchase.purchaseDetails.conversionRate` (number)
    The conversion rate that was used to convert the purchase amount from the `originalCurrencyCode` to the line of credit main currency.
For example:
- Line of credit main currency code = `USD`
- `originalCurrencyCode=GBP`
- `originalCurrencyAmount=200.45`
- `conversionRate=1.33`

Then `amount = 200.45 * 1.33 = 266.59`.

  - `requestBody.purchase.purchaseDetails.description` (string)
    The description of the purchase. Purchases in authorized status are shown in borrower portal but NOT on statements.
Purchases in `pending` or `succeeded` status are shown in borrower portal and on statements.  At least one of the attributes,
`description` or `merchantName` must be passed

  - `requestBody.purchase.purchaseDetails.externalCardId` (string)
    DEPRECATED. Use the top-level `cardId` field on Create/Update Purchase instead, which resolves to a
Peach `Card` row scoped to the line of credit. This legacy field is preserved for back-compat and continues
to populate the `external_card_id` column verbatim.
Precedence: if both top-level `cardId` and `purchaseDetails.externalCardId` are supplied in the same
request, top-level `cardId` wins and `externalCardId` is silently ignored (no error, no warning).

  - `requestBody.purchase.purchaseDetails.isValidMerchantId` (boolean)
    `true` - if the merchant ID exists in Peach Merchants table.
`false` - if the merchant ID doesn't exist in Peach Merchants table.
Credit card lenders normally should not create merchants details in Peach and `isMerchantIdValid` attribute can be ignored.
Point of sale lenders normally have merchants details in Peach and can use `isMerchantIdValid` attribute as needed.

  - `requestBody.purchase.purchaseDetails.merchantCategoryCode` (string)
    The merchant category code of the card acceptor (merchant).

  - `requestBody.purchase.purchaseDetails.merchantCity` (string)
    The city of the merchant.

  - `requestBody.purchase.purchaseDetails.merchantCountry` (string)
    The country of the merchant.

  - `requestBody.purchase.purchaseDetails.merchantId` (string)
    The merchant identifier where the purchase was made.

  - `requestBody.purchase.purchaseDetails.merchantName` (string)
    The merchant name where the purchase was made. At least one of the attributes, `description` or `merchantName` must be passed.

  - `requestBody.purchase.purchaseDetails.merchantState` (string)
    The state of the merchant.

  - `requestBody.purchase.purchaseDetails.metadata` (object)
    Store any type of key/value pairs in the form of a JSON dictionary.

  - `requestBody.purchase.purchaseDetails.originalCurrencyAmount` (number)
    The amount of the purchase before currency conversion.

  - `requestBody.purchase.purchaseDetails.originalCurrencyCode` (string)
    The currency in which the purchase was made before currency conversion. Three letters according to [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).

  - `requestBody.purchase.purchaseDetails.pointOfSaleType` (string)
    - `online` - the purchase was made online on a website or in a mobile application.
- `physical` - the purchase was made in a store with a physical card or instrument.
- `recurring` - the purchase was made as part of a subscription service.
    Enum: "online", "physical", "recurring"

  - `requestBody.purchase.status` (string)
    The status of the purchase.
- `authorized` - the purchase is authorized and not yet `settled`. Authorized purchases are included in `utilizationAmount`, `openToBuy` and `availableCreditAmount` calculations; however, authorizations are not written to the ledger and are not included in total outstanding loan balances.
- `settled` - the purchase was settled.
- `pending` - the purchase is pending. `pending` purchases increases the draw balance similar to `settled`. Pending status is used mainly
for visuals and normally shown in Borrower Portal and on statements.
- `canceled` - the purchase was canceled. `canceled` purchases reduce the draw balance. A new purchase cannot be created in `canceled` status.
- `declined` - the purchase was declined. `declined` purchases reduce the draw balance if the status changes from `pending` to `declined`. A new purchase can be created in `declined` status for record purposes (it will not impact the draw balance).
- `disputed` - The purchase was disputed for full or partial amount. `disputed` status is a terminal state and once set cannot be changed to another status. This status can not be set manually. Submitting a purchase dispute will set the purchase's status to `disputed`.

The following status transitions are allowed:
- `authorized` -> `pending`
- `authorized` -> `settled`
- `authorized` -> `canceled`
- `authorized` -> `declined`
- `pending` -> `settled`
- `pending` -> `canceled`
- `pending` -> `declined`
- `declined` -> `authorized`
- `settled` -> `canceled`
- `settled` -> `disputed` (only by calling "Create purchase dispute")
    Enum: "authorized", "pending", "settled", "canceled", "declined", "disputed"

  - `requestBody.purchase.timestamps` (object)

  - `requestBody.purchase.timestamps.authorizedAt` (string)
    The timestamp when the purchase was `authorized`. This value can be set by lenders at the time of purchase creation.
If the value is not set by the lender, it will be populated based on `authorizedAt` (if it is non-null) otherwise `createdAt` for the corresponding `authorizationPurchaseId`.
If the value is not set by the lender and no `authorizationPurchaseId` is set, this value corresponds to `purchase.authorized` event.
If the purchase was never in `authorized` status and none of the prior conditions are met, this value will be null.

  - `requestBody.purchase.timestamps.createdAt` (string)

  - `requestBody.purchase.timestamps.effectiveAt` (string)
    The effective timestamp when the purchase was applied in the ledger. `effectiveAt` is equal to the timestamp when the purchase is set to
`pending` or `settled` status, whichever comes first. Changing the `effectiveAt` via the `Update purchase` endpoint will trigger a replay
of the line of credit. Keep in mind that an existing statement might've included the purchase based on the existing `effectiveAt` value
and the interest was accrued based on the existing `effectiveAt`. `effectiveAt` can be updated only if the purchase is in `settled` or `pending` status.

  - `requestBody.purchase.timestamps.settledAt` (string)
    The timestamp when the purchase was `settled`. Corresponds to `purchase.settled` event.

  - `requestBody.purchase.timestamps.updatedAt` (string)

  - `requestBody.purchase.type` (string)
    - `regular` - a regular purchase made by the borrower. Increases draw's balance.
- `refund` - a refund of the purchase made in the past. Decreases draw's balance.
- `cashBack` - cash back given to the borrower by the issuing institution.
    Enum: "regular", "refund", "cashBack"

  - `requestBody.purchase.refundDetails` (object)
    The details of how a refund was applied:
- The system will first deplete any non-due principal. This amount will be stored as `refundNonDuePrincipalAmount`.
- If any refund amount is left to apply, the system will create a transaction of type `serviceCredit` and
`serviceCreditType=refund`. This transaction will be applied on the Draw level first and any leftover amount will
be applied on the LOC level (based on the loan type waterfall configuration for payments). This amount will be stored as
`refundTransactionAmount`.
- Any unapplied refund amount will be recorded as credit to the borrower (also called `reimbursementAmount`.)

  - `requestBody.purchase.refundDetails.refundNonDuePrincipalAmount` (number)
    Amount of refund that was applied to reduce the non-due principal of the draw.
The total amount of refund is equal to `refundNonDuePrinicpalAmount + refundTransactionAmount`.

  - `requestBody.purchase.refundDetails.refundTransactionAmount` (number)
    Amount of refund that was applied to as a transaction to reduce other balances of the draw and potentially other draws.
The total amount of refund is equal to `refundNonDuePrinicpalAmount + refundTransactionAmount`.

  - `requestBody.purchase.refundDetails.refundTransactionId` (string)
    Reference to the transaction ID of type service credit and serviceCreditType=refund. This is Peach Public ID.

  - `requestBody.purchaseDisputeId` (string)
    Peach identifier of the dispute object that belongs to the purchase.

  - `requestBody.purchaseExternalId` (string)
    The external identifier of the disputed purchase.

  - `requestBody.purchaseId` (string)
    Peach identifier of the disputed purchase. You must supply this field or the `purchaseExternalId` when creating a case.

  - `requestBody.bureauDisputeNotice` (string)
    ID for the interaction that resulted in the dispute case being opened

  - `requestBody.disputeCode1` (string)
    Enum: "notMine", "belongsToAnotherWithSimilarName", "notAwareOfCollection", "settlementOrPartialPaymentAccepted", "claimsPaidCreditorBeforeCollectionOrChargeOff", "creditLimitOrLoanAmountIncorrect", "includedInTheBankruptcyOfAnother", "claimsAccountClosed", "claimsAccoutClosedByConsumer", "contractCanceledOrRescinded", "accountIncludedInBankruptcy", "claimsActiveMilitaryDuty", "insuranceClaimDelayed", "accountInvolvedInLitigation", "claimsVictimOfNaturalOrDeclaredDisaster", "claimsAccountDeferred", "notLiable", "accountReaffirmedOrNotIncludedInBankruptcy", "claimsTrueIdentityFraud", "claimsAccountTakeOver", "disputesPresentPreviousAccountStatusPaymentRatingAccountHistory", "disputesPortfolioTypeAccountTypeOrTermsDurationFrequency", "claimsCompanyWillChange", "claimsCompanyWillDelete", "consumerStatesInaccurateInformation", "disputesDateOpenedDateOfLastPaymentOrDateClosed", "disputesDateOfFirstDeliquency", "disputesComplianceConditions", "disputesSpecialCommentCodeAndOrNarrativeRemarks", "disputesCurrentBalanceAndOrAmountPastDue", "disputesOriginalChargeOffPaymentOrScheduledPaymentAmount", "consumerDisputesDeceasedECOA"

  - `requestBody.disputeReceivedDate` (string)
    The date the dispute was received. This is the date the ACDV was
placed in the data furnisher's queue.

  - `requestBody.fcraInfo` (string)
    Contains a description of the FCRA-mandated relevant information
received from the consumer pertaining to this dispute. This is a
free-form text area.

  - `requestBody.responseCode` (string)
    Enum: "informationAccurateAsOfReportDate", "deleteAccount", "misroutedACDV", "deleteDueToFraud", "updateDisputedAccountInfoOnly", "updateDisputedAndAdditionalAccountInfo", "disputedInformationAccurateUpdatedAdditionalInfo", "consumersDisputeNotSpecific", "other"

  - `requestBody.responseDueDate` (string)
    The date by which an ACDV response must be received from a data
furnisher. After this date, the ACDV is removed from the queue
and the originating agency will take action per the
specifications of the Fair Credit Reporting Act (FCRA).

  - `requestBody` (object)
    Channel(s) and theme(s) for which interactions with a borrower are blocked.
Interactions with theme=`outOpsServicing` cannot be blocked since they
are typically initiated by a borrower.

  - `requestBody.createdAt` (string)

  - `requestBody.deletedAt` (string)

  - `requestBody.id` (string)

  - `requestBody.updatedAt` (string)

  - `requestBody.caseId` (string)
    Identifier of the case to which the `doNotInteract` belongs.

  - `requestBody.channels` (array)
    Channel(s) for which outbound interactions with a borrower are blocked.
Use value `all` for all channels.

  - `requestBody.contactLabels` (array)
    A list of contact labels.
A person's mobile phone is labeled as `personal`.
A person's work phone is labeled as `work`.
A person's home phone is labeled as `home`.
A person's home address is labeled as `home`.

  - `requestBody.daysOfWeek` (array)
    A list of days of week at which to block.
Valid range is 1-7. 1=Monday...7=Sunday. For example: `[1, 2, 4]`.
- If the day of week matches *any* of the values specified here, then the interaction is blocked.
- If this array is empty, then the interaction is blocked for all days of week.
    Example: [1,2,4]

  - `requestBody.endDate` (string)
    A future date when interaction restrictions will be lifted.
The value format is date only, without time. If today is `endDate`, the
restriction will remain until the end of day in the product timezone.
If no value is provided, `doNotInteract` will remain in effect until
`Remove do not interact` is called or `endDate` is set to a date in the past.

  - `requestBody.object` (string)
    Enum: "doNotInteract"

  - `requestBody.personId` (string)
    Identifier of the borrower to which the `doNotInteract` belongs.

  - `requestBody.source` (string)
    How the `DoNotInteract` instance was created. This is used by the internal case processing to determine
whether to stop blocking interactions when the `Case` changes state. This may not be returned by
default depending on your configuration.
The possible values are:
* `api`: created by an external user through an authorized HTTP request to the API
* `service`: created by internal server process, or an API call from a recognized Peach service within the
virtual private cloud (VPC)
* `manual`: created by SQL or manual entry, this is prevented except for rare maintenance situations.
    Enum: "api", "service", "manual"

  - `requestBody.themes` (array)
    Theme(s) for which outbound interactions with a borrower are blocked. Use value
`all` for all themes. `all` doesn't include `opsAccountCredentials`.
For example, use `opsCollDebt` to stop debt collection interactions.

  - `requestBody.timesOfDay` (array)
    A list of times of day at which to block—in hour resolution.
- If the time falls into *any* of the ranges specified here, then
the interaction is blocked.
- If this array is empty, then the interaction is blocked for all times of day.

  - `requestBody.timesOfDay.fromHour` (number, required)
    From hour in the borrower's home address timezone. Value range is 0-23. 0=Midnight...23=11 PM.
`fromHour` must be smaller than `toHour`.

  - `requestBody.timesOfDay.toHour` (number, required)
    To hour in the borrower's home address timezone. Value range is 0-23. 0=Midnight...24=Midnight of following day.
`fromHour` must be smaller than `toHour`.

  - `requestBody.timezone` (string)
    The time zone where the borrower is located. If provided, the time zone will be used for restriction. If not provided, the system will use the borrower's home address time zone.

  - `requestBody.startDate` (string)
    The start date for blocking interactions with a borrower. The value format is date
only, without time. The start date can be a future date.
If the value is not provided, or equal to today's date, or a date in the past, then the
`doNotIteract` will be effective as soon as we process the request.

  - `requestBody` (object)
    A borrower, case, supercase or interaction can have a note associated with it. Each note can only be associated with one of these objects.

  - `requestBody.id` (string)
    The note identifier.

  - `requestBody.archived` (boolean)
    Set to `true` if the note has been archived.

  - `requestBody.archivedAt` (string)

  - `requestBody.archivedBy` (object)

  - `requestBody.archivedBy.descriptor` (string)
    Short description of the user who performed the action.
Different systems may have different data available for a given user. The descriptor
gives the best available short description of the user. It prefers names, then email addresses,
then related IDs.
e.g.,
- "Borrower Tim Jones"
- "Borrower BO-ABCD-1234"
- "Peach Service User"
- "Agent Abigail Smith"
- "Agent bob@acme.com"
- "Agent EM-ABCD-1234"
    Example: Agent bob@acme.com

  - `requestBody.archivedBy.employee` (object)

  - `requestBody.archivedBy.employee.id` (string)
    The employee's ID

  - `requestBody.archivedBy.id` (string)
    The unique identifier of the user who performed the action.

  - `requestBody.archivedBy.name` (string)
    The name of the user who performed the action.

  - `requestBody.archivedBy.userType` (string)
    The type of the user.
    Enum: "agent", "borrower", "service"

  - `requestBody.caseId` (string)
    Identifier of the case that the note belongs to.

  - `requestBody.category` (string)
    Specifies the nature of a Note
    Enum: "generic", "escalationCreateReason", "escalationUpdateReason", "escalationCancelReason"

  - `requestBody.content` (string)
    The content of the note.

  - `requestBody.edited` (boolean)
    Indicates whether the note was edited.

  - `requestBody.important` (boolean)
    Set to `true` if the note is important.

  - `requestBody.interactionId` (string)
    Identifier of the interaction that the note belongs to.

  - `requestBody.pinned` (boolean)
    Specify that this note should be sorted to the top of the list
by default.

  - `requestBody.sensitiveData` (boolean)
    Indicates whether the note contains sensitive information.

  - `requestBody.status` (string)
    Enum: "active", "inactive"

  - `requestBody.supercaseId` (string)
    Identifier of the supercase that the note belongs to.

  - `requestBody.taskableInstruction` (boolean)
    Set to `true` if the note is intended to be an instruction which creates a review task.

  - `requestBody.type` (string)
    Enum: "borrowerNote", "caseNote", "interactionNote", "supercaseGlobalNote", "supercasePrivateNote"

