Installation
The SDK is split into packages. Install the ones you need:
Server SDK (backend)
npm install @opendoor/partner-sdk-server-js-coreUse @opendoor/partner-sdk-server-js-core in your backend (Express, Next.js API routes, etc.) to proxy requests to the Opendoor API. This is where your API key lives.
# Gemfilegem "opendoor-partner-sdk-server-ruby"bundle installUse Opendoor::PartnerSdk::Client from opendoor-partner-sdk-server-ruby in Rails, Sinatra, or any Ruby HTTP stack. Same responsibilities as the Node server SDK: GraphQL + REST to Opendoor, Basic auth with your API key. Requires Ruby 3.1+ (recommended: 3.3).
For a ready-made Rails API that mirrors the Node dev BFF, clone or copy demo-rails from this repo.
Client SDK (browser)
npm install @opendoor/partner-sdk-client-js-coreFramework-agnostic HTTP client for making typed requests to your backend’s Opendoor proxy endpoints. Does not talk to Opendoor directly. No framework dependency.
UI Components
npm install @opendoor/partner-sdk-client-react @opendoor/partner-sdk-client-js-corePrebuilt React components (AddressEntry, QualificationQuestions, DtcOnboardingFlow, etc.) that use the client SDK under the hood.
npm install @opendoor/partner-sdk-client-vue @opendoor/partner-sdk-client-js-coreVue 3 components (AddressEntry, AddressMap, AddressUnitConfirmation, DtcOnboardingFlow) that use the client SDK under the hood.
Important: Import the CSS in your app entry point:
import '@opendoor/partner-sdk-client-vue/dist/style.css';Requirements
- Node.js 20+ (for JS server SDK, browser client, and UI packages)
- Ruby 3.1+ (optional — for
opendoor-partner-sdk-server-rubyonly) - React 17+ (for client-react)
- Vue 3.3+ (for client-vue)
API Keys
- Staging: Provided by your Opendoor partner contact.
- Production: Manage keys at partner.opendoor.com/developer/keys.
Environments
The SDK defaults to staging for safe testing. When you’re ready to go live, set the server client to production (environment: 'production' in Node, environment: :production in Ruby) with your production API key.
Server SDK (Node):
// Staging (default) - no environment flag neededconst client = new OpendoorClient({ apiKey: process.env.OPENDOOR_STAGING_API_KEY!,});
// Productionconst client = new OpendoorClient({ apiKey: process.env.OPENDOOR_API_KEY!, environment: 'production',});Server SDK (Ruby):
# Staging (default)Opendoor::PartnerSdk::Client.new(api_key: ENV.fetch("OPENDOOR_API_KEY"), environment: :staging)
# ProductionOpendoor::PartnerSdk::Client.new(api_key: ENV.fetch("OPENDOOR_API_KEY"), environment: :production)Client SDK (browser):
// Staging (default)const client = new OpendoorClient({ baseURL: '/api/opendoor/v1' });
// Productionconst client = new OpendoorClient({ baseURL: '/api/opendoor/v1', environment: 'production',});Both the Node and Ruby server clients and the browser client SDK need production mode when you go live: Node uses environment: 'production', Ruby uses environment: :production. The server SDK routes API requests to the correct Opendoor endpoints, and the client SDK routes analytics telemetry to the correct pipeline.