Skip to main content

Prospect Data Requirements

This page describes the data Rhino needs to determine whether a renter can be offered a Security Deposit Alternative. Final underwriting and pricing happen later, once the renter is in the enrollment flow.

Field names below are exactly as they appear in the Partner Prospect API request body. If you are sending partner webhook events, you keep your own field names and Rhino's normalizer maps them onto these — so read this page as the set of values your events need to convey between them, not as a schema to conform to.

There are two distinct bars to clear:

  1. Validation — three fields, without which the prospect cannot be written at all. Over the API this is a 422; over events it is a dropped or dead-lettered message.
  2. Completeness — the larger set below, without which the prospect is accepted but sits at incomplete and never becomes eligible to enroll.

Required to accept the request

FieldFormatNotes
sourcestringYour partner code, assigned by Rhino
source_prospect_idstringYour identifier. Unique per property owner and source.
terms_accepted_atISO 8601 timestampWhen the renter accepted Rhino's terms in your flow

Although source_prospect_id only has to be unique within a property owner, use an identifier that is unique across your whole system. If you later serve a second property owner through Rhino, reused IDs make your own logs and webhook handling ambiguous long before Rhino rejects anything.

Required for the prospect to become eligible

A prospect moves from incomplete to processing only once all of these are present:

Identity

FieldFormatNotes
first_namestringLegal first name
last_namestringLegal last name
emailstringAlso the key the renter uses to open their enrollment link
phonestringDigits only, e.g. 5559876543
birthdateYYYY-MM-DD

Lease

FieldFormatNotes
lease_start_dateYYYY-MM-DD
lease_end_dateYYYY-MM-DD
monthly_rent_centsintegerCents. 200000 is $2,000.00.
deposit_amount_centsintegerThe cash deposit Rhino's product replaces

Underwriting

FieldFormatNotes
screening_resultenumapproved, conditional, or denied
employment_statusenumfull_time_student, employed, self_employed, unemployed, retired, corporation
yearly_incomeintegerWhole dollars, not cents
has_ssnbooleanSee below
social_security_numberstringRequired when has_ssn is true

Note the units asymmetry: yearly_income is in dollars while every *_cents field is in cents.

The SSN pair

has_ssn and social_security_number must agree, and this is enforced as a validation rather than treated as incompleteness:

  • has_ssn: true requires a non-blank social_security_number
  • has_ssn: false requires social_security_number to be absent
  • Leaving has_ssn unset keeps the prospect incomplete

Sending has_ssn: false is a valid, complete state — Rhino underwrites renters without an SSN.

Conditionally required

PMS identifiers

FieldFormatNotes
pms_typeenumCurrently only yardi
pms_property_idstringProperty code in the PMS
pms_unit_idstringUnit code in the PMS
pms_prospect_idstringProspect/resident code in the PMS

These are optional by default. When all of pms_type, pms_property_id, and pms_unit_id are supplied, Rhino matches the prospect to a specific property and unit, which improves pricing accuracy and lets webhook payloads carry PMS codes back to you.

Some property owners require them. When a property owner is configured that way, a prospect without them is marked ineligible with a corresponding entry in sdi_ineligibility_reasons. Confirm with your Partner Success Manager whether this applies to the owners you work with.

Optional

FieldFormatNotes
education_levelenumhigh_school, associate_degree, bachelor_degree, masters_degree, doctoral_degree
citizenshipenumus_or_green_card, non_us

These refine underwriting but never block eligibility. If you omit them, Rhino collects them from the renter during enrollment.

Formats

  • DatesYYYY-MM-DD
  • Timestamps — ISO 8601, e.g. 2026-07-24T15:04:05Z
  • Money — integer cents on *_cents fields, no symbols, separators, or decimals
  • Phone — digits only, no punctuation
  • Enums — lowercase snake_case, exactly as listed. An unrecognized value is a 422, not a silent fallback.

Sending null for a field is not the same as omitting it — omitted fields leave the stored value untouched, while null clears it and can push a ready prospect back to incomplete.

Handling PII

You are sending SSNs and dates of birth, so treat these requests accordingly:

  • All traffic is HTTPS; Rhino rejects plaintext HTTP
  • Never place prospect PII in URL query strings or path segments — only in the request body
  • Do not log request bodies containing social_security_number
  • Rhino stores SSNs encrypted at rest and does not return them in any API response or webhook payload

Rhino handles FCRA adverse-action notices for declined applications directly with the renter. Your integration does not need to surface a decline reason, and none is provided in the API or webhook payloads.

Next steps