Skip to main content

Account Object Shape

GET endpoints return an account object with this shape: Can Be Updated indicates whether the field can be sent to PATCH /external-api/accounts/:externalId or to an existing account through POST /external-api/accounts/bulk-upsert.
FieldTypeCan Be UpdatedNotes
idstringfalseInternal Cora account id
externalIdstringfalseYour external identifier
organizationIdstringfalseOwning organization id
statusstringtrueGranular account status
status_categorystringfalseBroader account status category derived from status
clientStatusstring | nulltrueFreely input your own status
phoneNumberstring | nulltruePrimary phone number
metadataMetadatatrueFlexible key/value object
personPerson | nulltruePerson profile details
emailAddressstring | nulltruePrimary email
currentEmailAddressIdstring | nullfalseCurrent email object id
emailAddressIdsstring[]falseLinked email ids
addressAddress | nulltrueAddress details
historyHistory | nulltrueAccount history payload
typeOfDebtstring | nulltrueDebt classification enum
complianceCompliance | nulltrueCompliance metadata
paymentRulesPaymentRules | nulltruePayment constraints
bankstring | nulltrueName of bank the debt originated from
clientstring | nulltrueName of the current client
originalCreditorstring | object | nulltrueName of the original creditor
currentBalancenumber | string | nulltrueCurrent balance
tagsstring[]trueTag list
contactInfoContactInfo | nulltrueContact preferences/details
smsOptOutSmsOptOut | nulltrueSMS opt-out details
createdAtISO datetime stringfalseCreation timestamp
updatedAtISO datetime stringfalseLast update timestamp

Type Definitions

Metadata Type

FieldTypeNotes
metadata.*unknownArbitrary key/value payload

Person Type

FieldTypeNotes
person.name.firststring | nullFirst name
person.name.laststring | nullLast name
person.birthdatestring | nullBirth date string (commonly YYYY-MM-DD)
person.ssnstring | nullFull SSN if provided
person.last4SSNstring | nullLast 4 SSN digits

Address Type

FieldTypeNotes
address.streetstring | nullPrimary street line
address.additionalStreetstring | nullSecondary street line
address.citystring | nullCity
address.statestring | nullState/province
address.zipstring | nullPostal code
address.countrystring | nullCountry

History Type

FieldTypeNotes
history.originstring | nullSource/origin description
history.statuteLimitationsDateISO datetime string | nullStatute date
history.accountOpened.dateISO datetime string | nullAccount opened date
history.lastPayment.amountnumber | nullLast payment amount
history.lastPayment.dateISO datetime string | nullLast payment date
history.placed.balancenumber | nullBalance at placement
history.placed.principalnumber | nullPrincipal at placement
history.placed.interestnumber | nullInterest at placement
history.placed.feesnumber | nullFees at placement
history.placed.dateISO datetime string | nullPlacement date
history.chargedOff.balancenumber | nullCharge-off balance
history.chargedOff.principalnumber | nullCharge-off principal
history.chargedOff.interestnumber | nullCharge-off interest
history.chargedOff.feesnumber | nullCharge-off fees
history.chargedOff.eventsobject[] | nullCharge-off event list (schema is flexible)

Compliance Type

FieldTypeNotes
compliance.statestring | nullCompliance state context

PaymentRules Type

FieldTypeNotes
paymentRules.maxSettlementTodaynumber | nullFraction between 0 and 1
paymentRules.maxSettlementPlannumber | nullFraction between 0 and 1
paymentRules.maxMonthsnumber | nullMax plan duration in months
paymentRules.maxInstallmentsnumber | nullMax number of installments

ContactInfo Type

FieldTypeNotes
contactInfo.email.addressstring | nullEmail contact
contactInfo.email.verifiedboolean | nullEmail verification status
contactInfo.phone.numberstring | nullPhone contact
contactInfo.phone.verifiedboolean | nullPhone verification status

SmsOptOut Type

FieldTypeNotes
smsOptOut.isOptedOutbooleanWhether SMS is opted out
smsOptOut.optedOutAtISO datetime string | nullOpt-out timestamp
smsOptOut.optedOutReasonstring | nullOpt-out reason (for example STOP)
smsOptOut.lastOptOutResponsestring | nullLast inbound opt-out text
smsOptOut.lookupCarrierstring | nullCarrier lookup result, if available
smsOptOut.lookupCarrierAtISO datetime string | nullCarrier lookup timestamp

Enumerated Values

status

LOADED, ACTIVE, PAID IN FULL, SETTLED IN FULL, PAYMENTS ON FILE, DECLINED, REFUSED, DISPUTE, CHARGEBACK, BANKRUPTCY, CEASE & DESIST, COMPLAINT FILED, FRAUD, LAWSUIT RISK, DO NOT CALL, DECEASED, JAIL, RECALLED, MANAGER REVIEW, FOLLOW UP, OTHER

status_category

NEW, ACTIVE, PAID, PARTIAL, DECLINED, REFUSED, LEGAL_HOLD, CLOSED, ADMIN status_category is returned by account GET endpoints and is derived from status. Use status, not status_category, when updating an account through PATCH /external-api/accounts/:externalId or POST /external-api/accounts/bulk-upsert.

typeOfDebt

credit_card, personal_loan, payday_loan, installment_loan, line_of_credit, auto_loan, auto_lease, medical, dental, utility, telecom, mortgage, rent, hoa, student_loan_private, student_loan_federal, retail_financing, bnpl, business_loan, commercial, parking_private, tolls, gym_membership, subscription, club_dues, municipal_fines, court_fines, taxes, nsf_check, other

Updatable Top-Level Fields

PATCH and bulk updates to existing accounts accept these top-level fields:
  • status
  • clientStatus
  • metadata
  • person
  • emailAddress
  • address
  • history
  • typeOfDebt
  • compliance
  • paymentRules
  • bank
  • client
  • originalCreditor
  • currentBalance
  • tags
  • contactInfo
  • smsOptOut
  • phoneNumber
For PATCH, if no valid field is provided, API returns:
  • 400
  • code: NO_VALID_UPDATABLE_FIELDS
For bulk upsert, an existing account with no changed updatable fields is reported as unchanged. A new account must include the creation fields documented in Bulk upsert accounts.

Request Body Shapes

Both payload shapes are supported. Direct:
{
  "status": "ACTIVE",
  "metadata": {
    "externalSystem": "crm-a"
  }
}
Wrapped:
{
  "update": {
    "status": "ACTIVE",
    "metadata": {
      "externalSystem": "crm-a"
    }
  }
}

Update Tracking Behavior

For successful PATCH updates and successful bulk updates to existing accounts:
  • Account changes are written to account auditTrail with source EXTERNAL_API
  • Timeline event ACCOUNT_UPDATED with source EXTERNAL_API is created
  • Response includes updated account identity and timestamp

Common Response Envelope

Success:
{
  "success": true,
  "code": "ACCOUNT_UPDATED",
  "message": "Account updated successfully",
  "account": {
    "id": "ACCOUNT_ID",
    "externalId": "FILE_123",
    "organizationId": "ORG_ID",
    "updatedAt": "2026-02-23T12:45:00.000Z"
  }
}
Error:
{
  "success": false,
  "code": "ACCOUNT_NOT_FOUND",
  "message": "Account not found"
}