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:
- 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. - Completeness — the larger set below, without which the prospect is accepted but sits at
incompleteand never becomes eligible to enroll.
Required to accept the request
| Field | Format | Notes |
|---|---|---|
source | string | Your partner code, assigned by Rhino |
source_prospect_id | string | Your identifier. Unique per property owner and source. |
terms_accepted_at | ISO 8601 timestamp | When 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
| Field | Format | Notes |
|---|---|---|
first_name | string | Legal first name |
last_name | string | Legal last name |
email | string | Also the key the renter uses to open their enrollment link |
phone | string | Digits only, e.g. 5559876543 |
birthdate | YYYY-MM-DD |
Lease
| Field | Format | Notes |
|---|---|---|
lease_start_date | YYYY-MM-DD | |
lease_end_date | YYYY-MM-DD | |
monthly_rent_cents | integer | Cents. 200000 is $2,000.00. |
deposit_amount_cents | integer | The cash deposit Rhino's product replaces |
Underwriting
| Field | Format | Notes |
|---|---|---|
screening_result | enum | approved, conditional, or denied |
employment_status | enum | full_time_student, employed, self_employed, unemployed, retired, corporation |
yearly_income | integer | Whole dollars, not cents |
has_ssn | boolean | See below |
social_security_number | string | Required 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: truerequires a non-blanksocial_security_numberhas_ssn: falserequiressocial_security_numberto be absent- Leaving
has_ssnunset keeps the prospectincomplete
Sending has_ssn: false is a valid, complete state — Rhino underwrites renters without an SSN.
Conditionally required
PMS identifiers
| Field | Format | Notes |
|---|---|---|
pms_type | enum | Currently only yardi |
pms_property_id | string | Property code in the PMS |
pms_unit_id | string | Unit code in the PMS |
pms_prospect_id | string | Prospect/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
| Field | Format | Notes |
|---|---|---|
education_level | enum | high_school, associate_degree, bachelor_degree, masters_degree, doctoral_degree |
citizenship | enum | us_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
- Dates —
YYYY-MM-DD - Timestamps — ISO 8601, e.g.
2026-07-24T15:04:05Z - Money — integer cents on
*_centsfields, 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
- Partner Webhook Events — the preferred way to send this data
- Partner Prospect API — sending it over HTTP instead
- Integration Types Overview — choosing an enrollment flow