Skip to main content
POST
/
api
/
quotations
/
followup
curl --request POST \
  --url https://api.ambiotec.com/api/quotations/followup \
  --header 'Authorization: Bearer YOUR_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "quotation_id": 789,
    "talked_with_lead": true,
    "interest_perception": "high",
    "payment_capacity": "medium",
    "decision_power": "full",
    "agreement": "negotiating",
    "contact_reminder_type": "specific_date",
    "contact_reminder_date": "2026-03-10T14:00:00Z",
    "medium": "phone"
  }'
{
  "success": true,
  "followup_id": 456,
  "next_reminder_at": "2026-03-10T14:00:00Z",
  "message": "Seguimiento registrado exitosamente"
}
Saves follow-up information after contacting a client about a quotation. This endpoint helps track lead qualification, interest levels, and schedule future contact reminders.

Body Parameters

quotation_id
integer
required
The ID of the quotation being followed up
talked_with_lead
boolean
Whether you were able to speak with the decision maker
interest_perception
string
Client’s perceived interest level. Values: high, medium, low, none
payment_capacity
string
Assessed payment capacity. Values: high, medium, low, unknown
decision_power
string
Contact’s decision-making authority. Values: full, partial, none, unknown
agreement
string
Current agreement status. Values: accepted, pending, negotiating, rejected
contact_reminder_type
string
Type of reminder to set. Values: specific_date, interval, none
contact_reminder_date
string
Specific date for next contact (ISO 8601 format). Required if contact_reminder_type is specific_date
contact_reminder_interval_value
integer
Number of time units for the reminder interval. Required if contact_reminder_type is interval
contact_reminder_interval_unit
string
Time unit for the interval. Values: hours, days, weeks. Required if contact_reminder_type is interval
medium
string
Contact method used. Values: phone, email, whatsapp, in_person, other

Response

success
boolean
Indicates if the follow-up was saved successfully
followup_id
integer
Unique identifier for the created follow-up record
next_reminder_at
string
Timestamp when the next follow-up reminder is scheduled (if applicable)
message
string
Confirmation message
curl --request POST \
  --url https://api.ambiotec.com/api/quotations/followup \
  --header 'Authorization: Bearer YOUR_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "quotation_id": 789,
    "talked_with_lead": true,
    "interest_perception": "high",
    "payment_capacity": "medium",
    "decision_power": "full",
    "agreement": "negotiating",
    "contact_reminder_type": "specific_date",
    "contact_reminder_date": "2026-03-10T14:00:00Z",
    "medium": "phone"
  }'
{
  "success": true,
  "followup_id": 456,
  "next_reminder_at": "2026-03-10T14:00:00Z",
  "message": "Seguimiento registrado exitosamente"
}

Business Logic

Lead Qualification Tracking

The follow-up system helps qualify leads by tracking:
  • Contact Success: Whether you reached the actual decision maker (talked_with_lead)
  • Interest Level: Client’s enthusiasm about the service (interest_perception)
  • Financial Capability: Ability to pay for services (payment_capacity)
  • Authority: Contact’s power to approve the quotation (decision_power)
  • Status: Current stage of negotiations (agreement)

Reminder Scheduling

The system supports two types of reminders:
  1. Specific Date: Set an exact date/time for follow-up
    • Use for scheduled appointments or promised callbacks
    • Example: “Client said to call back on March 10 at 2 PM”
  2. Interval-Based: Set a reminder after a time period
    • Use for general follow-ups without specific appointments
    • Example: “Follow up in 3 days if no response”
    • Calculation: next_reminder_at = NOW() + interval

Scheduler Integration

When a reminder is set:
  • The quotation followup scheduler is automatically refreshed (refreshQuotationFollowupScheduler())
  • The scheduler will trigger notifications when next_reminder_at is reached
  • Users receive alerts to contact the client again

Relationship to Quotation Lifecycle

Follow-ups are typically created:
  1. Automatically 24 hours after a quotation is finalized (via initiateQuotationFollowupJob())
  2. Manually by sales team after client contact
  3. After each subsequent contact until the quotation is accepted or rejected

Notes

  • The follow-up is associated with the user who created it (created_by from auth token)
  • Multiple follow-ups can be recorded for the same quotation to track conversation history
  • The database function fn_insert_quotation_followup() handles all validation and reminder calculations
  • Reminder notifications help prevent quotations from going stale
  • Track all contact attempts, even unsuccessful ones, for better pipeline visibility

Build docs developers (and LLMs) love