Address Details & Value Estimation
The getAddressDetails() method lets you check whether an address is eligible for an Opendoor offer and retrieve a preliminary value estimate — without creating an offer. Use this to power “Estimated cash offer” cards on property listing pages.
How it works
Partner listing page │ ├─ Call getAddressDetails(address) │ ├─ If eligible + valueEstimate: │ Show "Estimated cash offer: $lower – $upper" │ CTA → navigate to DTC questionnaire │ └─ If not eligible: Don't show the cardBackend setup
Add a BFF route that calls getAddressDetails():
import { OpendoorClient } from '@opendoor/partner-sdk-server-js-core';
const opendoor = new OpendoorClient({ apiKey: process.env.OPENDOOR_API_KEY!,});
app.post('/api/opendoor/v1/address/details', async (req, res) => { const { address, trackingId } = req.body; const result = await opendoor.getAddressDetails(address, trackingId); res.json(result);});Browser usage
import { OpendoorClient } from '@opendoor/partner-sdk-client-js-core';
const client = new OpendoorClient({ baseURL: '/api/opendoor/v1' });
const result = await client.getAddressDetails({ address: { street1: '123 Main St', city: 'Pleasanton', state: 'CA', postalCode: '94566', },});
const sell = result.products.homeSell[0];
if (sell.isEligible && sell.valueEstimate) { // Show the card console.log( `$${sell.valueEstimate.lower.toLocaleString()} – $${sell.valueEstimate.upper.toLocaleString()}` );}Response shape
interface GetAddressDetailsResponse { products: { homeSell: SellProduct[]; };}
interface SellProduct { isEligible: boolean; denialCode: string | null; denialExplanation: string | null; valueEstimate: ValueEstimate | null; referral: Referral | null;}
interface ValueEstimate { lower: number; // Low end of estimate upper: number; // High end of estimate}
interface Referral { url: string; // Opendoor seller flow URL with referral tracking}Key behaviors
- If
isEligibleisfalse, bothvalueEstimateandreferralwill benull - Even when
isEligibleistrue,valueEstimatecan still benullin some cases — always check before rendering homeSellis an array but currently always contains a single entry- Values in
valueEstimateare in dollars (not cents)
Referral tracking
Pass an optional trackingId to attribute referrals to your tracking system:
const result = await client.getAddressDetails({ address: myAddress, trackingId: 'session-abc-123',});
// The referral URL will include your tracking ID:// https://partner.opendoor.com/api/v1/addresses/...?trackingId=session-abc-123Integration with DTC Onboarding Flow
The typical partner flow combines getAddressDetails() with the DTC questionnaire:
- Listing page: Call
getAddressDetails(address)→ show value estimate card - User clicks CTA: Navigate to your DTC integration page with the address
- DTC page: Call
createOffer(address)→getHomeDetail()→ renderDtcOnboardingFlow - User completes flow: Call
updateOffer()with the questionnaire answers
The address details check is separate from the offer flow — no offer is created until the user clicks through.
Denial codes
When isEligible is false, the response includes a denialCode and denialExplanation. See the Opendoor API docs for the full list of denial codes.