The listing app sends an enquiry to a lead intake endpoint behind an API gateway. The endpoint checks the payload and returns a confirmation in under a second.
- The app's enquiry ID acts as the idempotency key, protected by a unique constraint in PostgreSQL
- A retry after a dropped connection returns the stored lead and creates no second record
- Each lead carries the listing ID, price, district, property type, sale or rent flag and the buyer's message
- Phone numbers are normalized to E.164 format before anything else happens