Homeward Offer Requests API
Create, read, and update partner offer requests
Create, read, and update partner offer requests
openapi: 3.1.0
info:
title: Homeward Offer Estimate Buybox Offer Requests API
version: 1.0.0
description: 'The Homeward Offer Estimate API is for Homeward cash-offer digital partners. A partner posts a seller lead (property + customer + agent details) and Homeward responds with a Homeward Offer Estimate — an offer amount, an opinion-of-value range, a link to the Offer Estimate PDF, and a finalization link. Additional endpoints return the full offer breakdown, check whether a property is within Homeward''s "buybox," update the agent on a request, and finalize a lead. Access is by invitation: contact api@homeward.com for testing and production tokens.'
contact:
name: Homeward API
email: api@homeward.com
url: https://api-docs.homeward.com/
x-apisjson-source: postman/homeward-offer-estimate-postman.json
x-generated: '2026-07-19'
x-method: derived
servers:
- url: https://api.homeward.com
description: Production API host (BASE_URL)
tags:
- name: Offer Requests
description: Create, read, and update partner offer requests
paths:
/api/1.0.0/partner/offer-request/:
post:
operationId: createOfferRequest
tags:
- Offer Requests
summary: Create an offer request
description: An Offer Request is a request from a partner to receive a Homeward Offer Estimate. Posted from partner to Homeward. On success Homeward returns the offer estimate details; if the property is denied, reason_for_denial is populated and the offer fields are null.
security:
- tokenAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OfferRequest'
responses:
'201':
description: Offer request created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/OfferEstimate'
'400':
description: Homeward request is invalid
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'401':
description: Missing or invalid authentication token
/api/1.0.0/estimate/sell/{preliminary_offer_id}/:
get:
operationId: getOfferEstimate
tags:
- Offer Requests
summary: Offer Estimate Information
description: Returns the full offer breakdown for a preliminary offer so partners can display and explain the Homeward Offer (opinion of value, milestones, net proceeds, fees, program details).
security:
- tokenAuth: []
parameters:
- name: preliminary_offer_id
in: path
required: true
schema:
type: string
format: uuid
- name: fmt
in: query
required: false
schema:
type: string
enum:
- json
responses:
'200':
description: Preliminary Offer Information
content:
application/json:
schema:
$ref: '#/components/schemas/OfferBreakdown'
'401':
description: Missing or invalid authentication token
/api/1.0.0/partner/offer-request/{offer_request_id}/agent/:
patch:
operationId: updateOfferRequestAgent
tags:
- Offer Requests
summary: Update offer request agent
description: Update the real estate agent details for a partner offer request. The offer_request_id may be the partner_offer_request_id supplied at creation or the homeward_offer_id returned at creation. All fields are optional but the entire agent resource is replaced with what is provided.
security:
- tokenAuth: []
parameters:
- name: offer_request_id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Agent'
responses:
'200':
description: Offer request agent updated
content:
application/json:
schema:
$ref: '#/components/schemas/OfferEstimateWithAgent'
'400':
description: The request is invalid
'401':
description: Missing or invalid authentication token
components:
schemas:
EstimateAddress:
type: object
properties:
street:
type: string
unit:
type: string
city:
type: string
state:
type: string
zip:
type: string
OfferBreakdown:
type: object
properties:
opinion_of_value:
type: integer
opinion_of_value_min:
type: integer
opinion_of_value_max:
type: integer
address:
$ref: '#/components/schemas/EstimateAddress'
milestone_one:
type: integer
milestone_two:
type: integer
milestone_three:
type: integer
milestone_four:
type: integer
milestone_five:
type: integer
net_offer_price:
type: integer
net_offer_price_min:
type: integer
net_offer_price_max:
type: integer
homeward_partial_program_fee:
type: integer
homeward_program_fee_adjustment:
type: integer
incremental_sale_proceeds:
type: integer
listing_cost_adjustment:
type: integer
listing_cost_credit:
type: integer
net_proceeds_from_homeward_purchase:
type: integer
net_proceeds_from_homeward_sale:
type: integer
offer_price_percentage:
type: integer
program_fee:
type: number
program_fee_base:
type: integer
sale_price_estimate:
type: integer
seller_expenses:
type: integer
seller_upside_percentage:
type: integer
standard_closing_costs:
type: integer
total_program_proceeds:
type: integer
total_program_proceeds_min:
type: integer
total_program_proceeds_max:
type: integer
total_commission_percentage:
type: string
id:
type: string
lead_id:
type: string
ErrorEnvelope:
type: object
properties:
status:
type: integer
data:
type: string
description: Human-readable error detail
OfferEstimateWithAgent:
allOf:
- $ref: '#/components/schemas/OfferEstimate'
- type: object
properties:
agent:
$ref: '#/components/schemas/Agent'
OfferRequest:
type: object
required:
- partner_offer_request_id
- street_one
- city
- state
- postal_code
- customer_first_name
- customer_last_name
- customer_email
properties:
partner_offer_request_id:
type: string
description: Unique ID configured by the partner
street_one:
type: string
description: Street address
street_two:
type: string
description: Unit information
city:
type: string
state:
type: string
description: Standard 2-letter state abbreviation
postal_code:
type: string
description: Postal code only
no +4 identifier: null
customer_first_name:
type: string
customer_last_name:
type: string
customer_email:
type: string
format: email
description: Must be a unique email
customer_phone:
type: string
agent_first_name:
type: string
agent_last_name:
type: string
agent_email:
type: string
format: email
agent_phone:
type: string
bedrooms:
type: integer
bathrooms:
type: string
home_size_sq_ft:
type: integer
outstanding_loan_amount:
type: integer
agent_opinion_of_value:
type: integer
home_listing_status:
type: string
description: If already listed on MLS
enum:
- Coming Soon
- Listed
- Expired
- Withdrawn
- Cancelled
- Under Contract
- Sold
home_stories:
type: integer
master_on_main:
type: boolean
additions_made:
type: boolean
addition_sqft:
type: integer
has_basement:
type: boolean
basement_sqft:
type: integer
kitchen_countertop_type:
type: string
enum:
- corian
- formica
- granite
- granite tile
- other tile
- Quartz
garage_spaces_count:
type: integer
hvac_age:
type: integer
description: Age of the HVAC system in years
repair_or_update_detail:
type: string
photos:
type: array
items:
type: string
property_type:
type: string
enum:
- Single Family
- Unknown
- Multi-Family
- Luxury
- Condo
- Lot
- Other
- Commercial
- Mobile Home
- Townhouse
- Timeshare
has_solar_panels:
type: boolean
year_built:
type: integer
lot_size_acres:
type: integer
Agent:
type: object
properties:
first_name:
type: string
last_name:
type: string
email:
type: string
format: email
phone:
type: string
description: 10-digit phone with area code; accepts 999-888-7777, (999) 888-7777, 999.888.7777, 9998887777
OfferEstimate:
type: object
properties:
partner_offer_request_id:
type: string
homeward_offer_id:
type: string
format: uuid
offer_amount:
type:
- integer
- 'null'
opinion_of_value_min:
type:
- integer
- 'null'
opinion_of_value_max:
type:
- integer
- 'null'
expiration_date:
type:
- string
- 'null'
format: date
preliminary_offer_pdf:
type:
- string
- 'null'
format: uri
offer_finalization_link:
type:
- string
- 'null'
format: uri
reason_for_denial:
type:
- string
- 'null'
preliminary_offer_id:
type:
- string
- 'null'
format: uuid
securitySchemes:
tokenAuth:
type: apiKey
in: header
name: Authentication
description: Token authentication. Provide the testing or production token issued by Homeward in the Authentication header. Contact api@homeward.com to obtain tokens.