nahom endale
Case StudiesAboutResume
Nahom Endale

© 2026 Nahom Endale, New York

Case StudiesAboutResumeGitHubLinkedIn
Nahom Endale/Case studies/Make-an-Offer Flow
E-Comm Negotiation Flow logo

Make-an-Offer Flow

Dynamic pricing & negotiation

PayPal · Authorize, capture & void

WooCommerce · Custom offer order status

Admin · Capture, decline, or counter

Binding · Every offer backed by a card hold

01The Challenge

+
High-value rugs sell through negotiation, not fixed prices, but WooCommerce has no native way to let buyers make offers, counter them, and safely hold payment until both sides agree.

02The Solution

+
PayPal has no off-the-shelf make-an-offer, so I built one on its REST API. A buyer submits an offer and ZIP from the product page; PayPal authorizes and holds the funds rather than charging them, and the offer becomes a WooCommerce order with a custom "offer" status. Staff review it from an admin metabox and capture the hold to accept, void it to decline, or send a counter, which voids the original hold, creates a new order at the counter price, and emails the buyer a one-click link to accept and pay. Tax is computed per ZIP with WooCommerce's tax engine, and branded emails fire at every step.

03Features

+

Buyers submit an offer and shipping ZIP from the product page, with tax calculated live via WooCommerce for that ZIP.

PayPal authorizes and holds the funds instead of charging, so a buyer is only charged if their offer is accepted.

A WooCommerce order metabox lets staff capture, decline, or counter any offer from one place.

Staff propose a counter; the original hold is voided, a new order is created, and the buyer gets a one-click link to accept and pay.

Branded emails fire at every step, offer received, accepted, countered, or declined, to both the buyer and the team.

Each offer becomes a real WooCommerce order with a custom 'offer' status, wired into the PayPal Payments order UI.

04System Architecture

+

Buyer

Submits offer

Payments

PayPal authorize

Order

Woo order: offer

Ops

Admin review

Accept / decline

Capture / void

Counter

Counter: new order

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

Buyer

Submits offer

Payments

PayPal authorize

Order

Woo order: offer

Ops

Admin review

Accept / decline

Capture / void

Counter

Counter: new order

05Technology Stack

+

WordPress · WooCommerce · PHP

PayPal API · Authorize & hold · Capture / void

Custom order status · WC_Tax · Admin metabox

JavaScript · PayPal JS SDK · HTML emails

06Key Learnings

+
  1. 01PayPal has no 'make an offer' product, so I built the flow on its authorize-and-capture APIs: hold the funds on submit, capture on accept, void on decline, so a buyer is only ever charged for an accepted offer.
  2. 02Modeling each offer as a WooCommerce order with a custom 'offer' status kept the whole negotiation inside the existing admin, orders, emails, and reporting, instead of a separate system.
  3. 03Counter-offers had to stay safe for the buyer: voiding the original hold and creating a fresh order at the counter price meant never holding two authorizations against one person.
  4. 04Computing tax per ZIP at offer time with WooCommerce's tax engine kept the authorized amount matched to the real, final total.
View live flow ↗
View live flow ↗
Product page with Make an Offer
Product page with Make an Offer
The offer and counter-offer modal
The offer and counter-offer modal
PayPal payment authorization hold
PayPal payment authorization hold
Product page with Make an OfferThe offer and counter-offer modalPayPal payment authorization hold
Product page with Make an Offer
previous← OlaanextFile Automation API →