Homeowner portal data map
Each screen of the portal prototype, what it shows and what it collects, and the API call and field that serve it. The status says whether the API serves it today. This page is generated from the API contract and a mapping file kept beside it, so it changes when the API does.
See the API reference for every portal call with examples, try the API live against this sandbox, or download the OpenAPI file.
- Ready 41
- Partly built 9
- Not built yet 26
Ready: the API serves it now. Partly built: part of it is served, and the note says what is missing. Not built yet: nothing serves it; the note names the planned change. A field is a path into the answer (for what a screen shows) or into the request body (for what it collects); * means every item in a list.
Insured screens
Sign in from the emailed link
The homeowner opens the link in their email and lands on their property.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| The single-use link token from the email | Collects | POST /lcr/v1/portal/sessionexchangePortalLink | /linkToken | Ready | Send method passwordless_link. The answer is a session token for one property. |
| Who is signed in (homeowner or broker) | Shows | POST /lcr/v1/portal/sessionexchangePortalLink | /persona | Ready | |
| Ask for a new link when the old one has expired | Collects | POST /lcr/v1/portal/links/reissuerequestPortalLinkReissue | /linkToken | Ready | Always answers the same way, so it never reveals whether a link was valid. |
| Sign out | Collects | DELETE /lcr/v1/portal/sessionendPortalSession | Ready | No body; the session token is revoked. |
Property header and property list
The top of every screen names the property, the policy and the people on it.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Case reference | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /reference | Ready | |
| Property address | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /propertyAddress | Partly built | In the contract, but the portal strips it from the answer today. Build list item 2. |
| Policy number | Shows | None yet | Not built yet | Build list item 2, fed by Part C's enrichment. | |
| Policy period | Shows | None yet | Not built yet | Build list item 2. | |
| Insured name | Shows | None yet | Not built yet | Build list item 2. | |
| Broker or agent | Shows | None yet | Not built yet | Build list item 2. | |
| Front-of-home photo | Shows | None yet | Not built yet | Build list item 2. | |
| Name of the person signed in | Shows | None yet | Not built yet | Build list item 2. | |
| List of my properties | Shows | GET /lcr/v1/portal/associationsportalListAssociatedAssessments | /items/*/reference | Partly built | Brokers only today; a homeowner is refused (403). Build list item 2. |
Plan and recommendations
The plan the homeowner received, one card per recommended action.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Action number (Recommendation N) | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/label | Ready | |
| Action title | Shows | None yet | Not built yet | The catalog holds a title but the portal does not expose it. Build list item 5. | |
| What to do | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/actionText | Ready | |
| Why it matters | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/whyItMatters | Ready | |
| Building it applies to | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/affectedStructure | Ready | |
| Photos of the condition | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/images/*/access/url | Ready | Short-lived signed links; fetch them again when they expire. |
| Due date | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/currentDueDate | Ready | originalDueDate keeps the first date when an extension is approved. |
| Action status, in customer wording | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/statusLabel | Ready | status holds the stable value; statusLabel the words to show. |
| Plan progress (done out of total) | Shows | GET /lcr/v1/portal/assessment/progressportalGetProgress | /complete | Ready | total, open, overdue and underReview sit beside it. |
| Agree-by deadline | Shows | GET /lcr/v1/portal/assessment/intentportalGetIntent | /deadline | Partly built | One deadline for the whole plan today (14 days). Per action, 30 days after delivery, is B1 (PR |
| Messages that need the homeowner's attention | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /needsAttention/*/message | Ready | |
| Download the plan as a PDF | Shows | GET /lcr/v1/portal/assessment/reportportalGetReportPdf | /url | Ready | Only when pdfAvailable is true on the assessment. |
Answer each action
For each action the homeowner says "I'll do this", "I need a change" or "I will not complete this".
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| "I'll do this" for one action | Collects | PUT /lcr/v1/portal/assessment/intentportalPutIntent | /choice | Partly built | One answer for the whole plan today (comply_by_current_dates). Per action is B1 (PR |
| "I will not complete this" with a reason, for one action | Collects | PUT /lcr/v1/portal/assessment/intentportalPutIntent | /comment | Partly built | Whole plan only today (no_intent_to_comply with a comment). Per action is B1 (PR |
| "I need a change": more time | Collects | POST /lcr/v1/portal/recommendations/{recommendationId}/requestsportalCreateItemRequest | /requestedDate | Ready | kind date_adjustment, with a reason. |
| "I need a change": a different approach | Collects | POST /lcr/v1/portal/recommendations/{recommendationId}/requestsportalCreateItemRequest | /requestedOutcome | Ready | kind alternate_mitigation, with a reason. |
| More time and a different approach in one request | Collects | POST /lcr/v1/portal/recommendations/{recommendationId}/requestsportalCreateItemRequest | /kind | Partly built | A second request while one is open is refused (409 open_request_exists). Build list item 1. |
| Reason for the change | Collects | POST /lcr/v1/portal/recommendations/{recommendationId}/requestsportalCreateItemRequest | /reason | Ready | |
| State of the change request | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/openRequest/state | Ready | pending, approved, rejected or withdrawn. |
| Each action's own answer and its state | Shows | None yet | Not built yet | B1 (PR | |
| Outcome when the team denies "I will not complete this" | Shows | None yet | Not built yet | B1. Our system never cancels; the app decides what to show. |
Send photos and documents
The homeowner sends proof that an action is done, at any time, one file or many.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Choose the files to send | Collects | POST /lcr/v1/portal/recommendations/{recommendationId}/evidence/uploadsportalInitiateEvidenceUpload | /files/*/fileName | Ready | Each file gets a signed upload link; JPEG, PNG, PDF and Word (.docx) today. |
| File limits to show before sending | Shows | POST /lcr/v1/portal/recommendations/{recommendationId}/evidence/uploadsportalInitiateEvidenceUpload | /limits/maxFiles | Ready | Also maxBytesPerFile and allowedMediaTypes. |
| Files refused and why | Shows | POST /lcr/v1/portal/recommendations/{recommendationId}/evidence/uploadsportalInitiateEvidenceUpload | /rejected/*/message | Ready | |
| Finish sending | Collects | POST /lcr/v1/portal/evidence/uploads/{uploadId}/confirmportalConfirmEvidenceUpload | /files/*/clientRef | Ready | |
| A statement instead of a photo (attestation) | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/attestation/statement | Ready | Only on actions whose catalog entry allows one. |
| The homeowner's answer to the statement | Collects | POST /lcr/v1/portal/recommendations/{recommendationId}/attestationsportalSubmitAttestation | /selectedResponse | Ready | |
| What the reviewer still needs | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/moreEvidenceExplanation | Ready | Only while the action is more_evidence_needed. |
| Photo areas tied to the before photos (one after-photo per area) | Shows | None yet | Not built yet | Build list item 3. | |
| HEIC photos from iPhones | Collects | None yet | Not built yet | Refused as an unsupported type today. Build list item 3. | |
| More than 10 files in one batch | Collects | POST /lcr/v1/portal/recommendations/{recommendationId}/evidence/uploadsportalInitiateEvidenceUpload | /files | Partly built | The 11th and later files are refused today. Build list item 3. |
| Invoice as a document kind, and .doc files | Collects | None yet | Not built yet | Build list item 3. | |
| Recorded confirmation: these photos were taken at this property and show the work today | Collects | None yet | Not built yet | Build list item 3. | |
| What was sent, when and by whom | Shows | None yet | Not built yet | No portal read of sent files yet. Build list item 3. |
Action history
Dates and people for each step of an action, and the plan's completion.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Date the plan was agreed, and by whom | Shows | GET /lcr/v1/portal/assessment/intentportalGetIntent | /current/respondedAt | Partly built | For the whole plan today; per action is B1 (PR |
| Change request details and outcome | Shows | POST /lcr/v1/portal/recommendations/{recommendationId}/requestsportalCreateItemRequest | /state | Partly built | Returned when the request is made; later the assessment shows only its id and state. Build list item 4. |
| Date photos were sent, with the person | Shows | None yet | Not built yet | Build list item 4. | |
| Date an action was verified, with the person | Shows | None yet | Not built yet | Build list item 4. | |
| The action is complete | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/status | Ready | The value complete, only once the team has accepted the proof. |
| The plan's Completed date | Shows | None yet | Not built yet | Shown automatically once every action is verified; staff still close the official record. Build list item 4. |
What the plan covers
The wider picture around the actions, so the homeowner sees what is already in good shape.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Guidance for each action | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/guidance | Ready | |
| What You Don't Need to Do | Shows | None yet | Not built yet | Build list item 5. | |
| How to Keep This Up | Shows | None yet | Not built yet | Build list item 5. | |
| Conditions already in good shape ("17 checked, 13 in great shape") | Shows | None yet | Not built yet | Build list item 5. | |
| Completed and Verified badge | Shows | None yet | Not built yet | Build list item 5. |
Questions and chat
The homeowner asks the loss-control team a question and reads the replies.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| The conversation | Shows | GET /lcr/v1/portal/questionsportalListQuestions | /items/*/body | Ready | sender and sentAt sit beside each message. |
| Ask a question | Collects | POST /lcr/v1/portal/questionsportalAskQuestion | /body | Ready | recommendationId ties it to one action. |
| Unread message count | Shows | None yet | Not built yet | Build list item 6. | |
| Ask for help with the portal | Collects | POST /lcr/v1/portal/support-requestsportalRequestSupport | /description | Ready |
Broker screens
Broker sign-in
Brokers sign in with email, password and an emailed code; they never get a passwordless link.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Email and password | Collects | POST /lcr/v1/portal/signinstartPortalSignin | /email | Ready | Starts a challenge; a code is emailed. |
| The emailed code | Collects | POST /lcr/v1/portal/signin/verifyverifyPortalSignin | /code | Ready | The answer is a sign-in assertion for the session call. |
| Open a session with the assertion | Collects | POST /lcr/v1/portal/sessionexchangePortalLink | /signinAssertion | Ready | Send method conventional_signin. |
| Set or reset a password | Collects | POST /lcr/v1/portal/recoverystartPortalRecovery | /email | Ready | Finished with completePortalRecovery. |
My properties
A broker sees every property they are associated with and moves between them.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Property reference for each property | Shows | GET /lcr/v1/portal/associationsportalListAssociatedAssessments | /items/*/reference | Ready | |
| Open one property | Collects | POST /lcr/v1/portal/session/switchportalSwitchAssessment | /assessmentId | Ready | Each property needs its own session token. |
| Property address in the list | Shows | None yet | Not built yet | Build list item 2. | |
| Each property's progress in the list | Shows | None yet | Not built yet | Today the broker opens each property to see it. |
A property's plan
The same plan, actions and history the homeowner sees, for the property the broker opened.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| Recommended actions | Shows | GET /lcr/v1/portal/assessmentportalGetAssessment | /recommendations/*/actionText | Ready | Same answer as the homeowner's plan screen. |
| Plan progress | Shows | GET /lcr/v1/portal/assessment/progressportalGetProgress | /items/*/status | Ready | |
| Policy number and insured name | Shows | None yet | Not built yet | Build list item 2. |
Broker questions and chat
The broker's conversation with the loss-control team about one property.
| What | Shows or collects | API call | Field | Status | Note |
|---|---|---|---|---|---|
| The conversation | Shows | GET /lcr/v1/portal/questionsportalListQuestions | /items/*/body | Ready | |
| Ask a question | Collects | POST /lcr/v1/portal/questionsportalAskQuestion | /body | Ready | |
| Unread message count across properties | Shows | None yet | Not built yet | Build list item 6. |
Portal operations not used by the prototype
These calls exist but no prototype screen uses them yet.
POST /lcr/v1/portal/questions/readportalMarkQuestionsRead: Mark a question thread read for the signed-in responderGET /lcr/v1/portal/recommendations/{recommendationId}/answerportalGetItemAnswer: The homeowner's current answer on one delivered actionPUT /lcr/v1/portal/recommendations/{recommendationId}/answerportalPutItemAnswer: Answer one delivered action - I'll do this, I need a change, or I will not complete thisGET /lcr/v1/portal/recommendations/{recommendationId}/evidenceportalListEvidence: What was sent for one recommendation, when and by whomGET /lcr/v1/portal/recommendations/{recommendationId}/requestsportalListItemRequests: Every request on one recommendation, with its decision time and granted valuesPOST /lcr/v1/portal/recovery/completecompletePortalRecovery: Complete recovery with the emailed code and a new password; every open session of the identity ends