Schedule Assessment Flow
The ScheduleAssessmentFlow component lets a customer schedule the pre-underwriting home assessment for an existing offer. It fetches available slots, lets the customer pick a date + time, and collects optional reminder phone number and gate-code / access instructions.
This is the pre-contract assessment — its artifacts feed underwriting before the final offer. It is distinct from the post-contract diligence visit, which is scheduled separately.
Basic usage
import { ScheduleAssessmentFlow, OpendoorProvider,} from '@opendoor/partner-sdk-client-react';import { OpendoorClient } from '@opendoor/partner-sdk-client-js-core';
const client = new OpendoorClient({ baseURL: '/api/opendoor/v1' });
function App({ offerId }: { offerId: string }) { return ( <OpendoorProvider client={client}> <ScheduleAssessmentFlow offerId={offerId} appearance={{ theme: 'minimal' }} onScheduled={(visitId) => { console.log('Scheduled visit:', visitId); }} /> </OpendoorProvider> );}<script setup lang="ts">import { ScheduleAssessmentFlow, OpendoorClient, OpendoorProvider,} from '@opendoor/partner-sdk-client-vue';import '@opendoor/partner-sdk-client-vue/dist/style.css';
const props = defineProps<{ offerId: string }>();const client = new OpendoorClient({ baseURL: '/api/opendoor/v1' });
const handleScheduled = (visitId: string) => { console.log('Scheduled visit:', visitId);};</script>
<template> <OpendoorProvider :client="client"> <ScheduleAssessmentFlow :offer-id="offerId" :appearance="{ theme: 'minimal' }" @scheduled="handleScheduled" /> </OpendoorProvider></template>Wrap the component in <OpendoorProvider> to supply the SDK client.
Required BFF endpoints
| Route | Backing server SDK call |
|---|---|
POST /api/opendoor/v1/assessmentSlots | opendoor.getAssessmentSlots({ ... }) |
POST /api/opendoor/v1/scheduleAssessment | opendoor.scheduleAssessment({ ... }) |
POST /api/opendoor/v1/customerContact | opendoor.getCustomerContact({ ... }) |
The server SDK methods (getAssessmentSlots, scheduleAssessment, getCustomerContact) wrap the Opendoor partner-API. Wire the three routes on your BFF that proxy to them.
The customerContact route is what powers the automatic prefill of the customer’s name and phone on the confirm step.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
offerId | string | Required | The opendoorOfferRequestId returned from createOffer |
appearance | OpendoorAppearance | { theme: 'minimal' } | Visual theme configuration |
customerName | string | auto-fetched | Pre-fills the name field on the confirm step. See Prefilling customer details |
customerPhone | string | auto-fetched | Pre-fills the phone field on the confirm step. See Prefilling customer details |
showAttribution | boolean | true | Show the “Powered by Opendoor” attribution |
onScheduled | (visitId: string) => void | - | Called with the new visitId after a successful schedule submission |
onReady | () => void | - | Called when the component has loaded slots and is ready for input |
onError | (error: Error) => void | - | Called on slot-fetch or schedule-submission errors |
isRescheduling | boolean | false | When true, hides the gate-code / access-instructions section |
In Vue, props use kebab-case in templates (e.g., offer-id). Callbacks are emits — use @event-name syntax.
| Prop | Type | Default | Description |
|---|---|---|---|
offer-id | string | Required | The opendoorOfferRequestId returned from createOffer |
appearance | OpendoorAppearance | { theme: 'minimal' } | Visual theme configuration |
customer-name | string | auto-fetched | Pre-fills the name field on the confirm step. See Prefilling customer details |
customer-phone | string | auto-fetched | Pre-fills the phone field on the confirm step. See Prefilling customer details |
show-attribution | boolean | true | Show the “Powered by Opendoor” attribution |
is-rescheduling | boolean | false | When true, hides the gate-code / access-instructions section |
Events
| Event | Payload | Description |
|---|---|---|
scheduled | string | Emitted with the new visitId after a successful schedule submission |
ready | - | Emitted when slots have loaded |
error | Error | Emitted on slot-fetch or schedule-submission errors |
Styling
The component uses the appearance prop for theming, defaulting to the minimal theme. All standard tokens apply — colors, fonts, spacing, borders, and radii are shared with other SDK components like AddressEntry and DtcOnboardingFlow. See the Appearance guide for the full token list.
How it works
- On mount, the component calls
getAssessmentSlots({ offerId })to fetch available slots from your BFF. - The customer picks a slot and (when not rescheduling) confirms gate-code / access instructions and a reminder phone number.
- On submit, the component calls
scheduleAssessment({ offerId, selectedInspectionTime, reminderPhone, notes }). On success, it emitsonScheduled(visitId).
Pair this component with DtcOnboardingFlow for partner trade-in flows: customer completes onboarding → offer is created and a preliminary offer is shown → customer schedules the assessment via this component → underwriting runs against the assessment artifacts → final offer is presented for contract signing.
Prefilling customer details
The confirm step asks for the customer’s name and a reminder phone number. Those values were already submitted earlier by DtcOnboardingFlow, so re-typing them is a wart in the flow.
By default, the component handles this for you. On mount, it calls client.getCustomerContact({ opendoorOfferRequestId }) and pre-fills the name and phone fields from the response. The user can still edit either field. If the fetch fails (e.g., the offer hasn’t reached OFFERED yet) the fields stay empty and the user fills them in manually — no error is surfaced.
Wire the POST /api/opendoor/v1/customerContact route on your BFF (see Required BFF endpoints) for this to work.
You can opt out of the auto-prefill by passing customerName / customerPhone explicitly — when either prop is set, the component uses your value instead of fetching:
<ScheduleAssessmentFlow offerId={offer.opendoorOfferRequestId} customerName="Jane Doe" customerPhone="5551234567"/><ScheduleAssessmentFlow :offer-id="offer.opendoorOfferRequestId" customer-name="Jane Doe" customer-phone="5551234567"/>