followups-public

Submit Loss Reason

Confirm POST from the loss page. Idempotent: a repeat submit with a reason already recorded refuses the overwrite (stale-token protection) and reports already_recorded.

post/api/v1/followups/public/loss-reason

Request body

tokenstring required
reason'price_too_high' | 'lead_time_too_long' | 'went_elsewhere' | 'project_cancelled' | 'spec_changed' | 'no_response' | 'other' required

Structured why-we-lost-it taxonomy for quotes (retention MVP).

Captured forward-only from three sources (see LostReasonSource); legacy free-text reasons in QuoteAudit JSON are NOT backfilled. Feeds the Customers CRM timeline and, via Quote.pricing_bucket_key, the future pricing-calibration join (PRO-230).

notestring nullable

Response

Successful Response

recordedboolean required
already_recordedboolean required

Changes

No recorded changes to this endpoint across all 1 revision of this API.