Figure 2 — Offer Lifecycle State Diagram (Complete Status Transition Map)
ENTRY POINT: Listing Created
Option A: Listing Agent creates listing → share link generated | Option B: Buyer's Agent searches MLS-syndicated property via Bridge API
↓
Offer Submitted (status: submitted)
Buyer agent uploads signed offer PDF + contact details via share link or H&B token link. Submission timestamped server-side. AI Extraction Engine parses PDF and populates structured fields.
↓
Notifications Dispatched
Email sent to listing agent, seller, buyer agent, and buyer. In-app bell notification delivered to all authenticated parties. Email delivery logged in email_delivery_log array. Tracking pixel embedded for open detection.
↓
DECISION: Listing Agent Action
Agent selects one of the following actions:
Accept
status → accepted
accepted_at = NOW
binding_contract_url set
All parties notified
Reject
status → rejected
rejection_email_sent = true
rejection_message set
Buyer agent + buyer notified
Counter Offer
status → countered
counter_pdf_url set
counter_submitted_at = NOW
counter_expires_at set
Buyer agent notified
Highest & Best
highest_best_mode = true
highest_best_token generated
Deadline set
All buyer agents notified
Withdraw
status → withdrawn
withdrawal_pdf_url set
withdrawn_at = NOW
Listing agent notified
↓ (upon acceptance)
Post-Acceptance Contract Management Phase
Amendment
Either party proposes amendment
amendments[ ] array appended
status: pending → accepted/rejected
All parties notified on response
Termination
status → terminated
termination_pdf_url set
terminated_at = NOW
Reinstatement proposal available
Closing (Sold)
status → sold
Full audit trail archived
All viewed_by arrays preserved
email_delivery_log preserved
Complete Offer Status Enum (All Valid States)
submitted
under_review
accepted
rejected
countered
sold
withdrawn
terminated
Fig. 2 — Complete Offer Lifecycle State Diagram. Offers transition through eight possible states from initial submission to final disposition. Post-acceptance contract management supports amendments, termination with optional reinstatement, and final closing. All state transitions are timestamped server-side and logged in the Offer entity audit arrays.