Skip to content
Knowledge ERP Docs
API Reference ↗
Surveys

Customer Surveys

Send post-purchase surveys, calculate NPS, automate reminders, and get alerted on low scores — with anonymous open links and per-survey customization.

The Surveys module measures customer sentiment and routes the signal back to you.

In this section #

Detailed guides for everything covered here:

  • Survey Responses — One respondent's completed submission to a survey — the set of answers they gave to each question, tied back to the survey and, when there is one, the invitation that brought them in.

Building and sending #

Create a survey with custom question types, then deliver it via survey invitations. Invitations support email customization (subject, intro), a custom thank-you message, and an anonymous open link for public collection.

Sending one on demand #

A Send Survey button sits in the header of every record a survey can be tied back to — a sales order, a customer invoice, an appointment and a unit checkout. Pick the survey, confirm the email (pre-filled from the record's customer or booking contact) and it goes out immediately. The invitation is linked back to the record it was sent from, so responses stay traceable to the job that prompted them. The button appears only for accounts on the Surveys module.

NPS and reporting #

Responses roll up into an NPS score and a response-rate funnel on the results page, so you can see both how customers feel and how many are answering.

Reminders and alerts #

Automated reminder emails nudge non-responders after a configurable delay, and low-score alerts email you when a response falls below a threshold so you can follow up while it still matters. Invitations expire on a schedule.

Importing results #

Already have survey data? The internal admin tools include a CSV import with column mapping for bulk-loading historical results.

Automating surveys #

Surveys can be sent without anyone clicking a button:

  • Triggers — a survey trigger auto-sends a survey a set number of hours after a sales_order, appointment, or item_checkout completes (with an optional reminder), evaluated by a scheduled command.
  • Automation builder — the Send Survey action in the workflow builder sends a survey from any rule, with the recipient email interpolated from the trigger context.
  • Webhooks — subscribe to survey.completed, survey.low_score, and questionnaire.completed to react to responses in real time. See Webhooks.

Doing it from the API #

The whole lifecycle is scriptable — build a survey, add questions and choices, then send and track invitations.

# Create a survey
curl -X POST "https://your-domain.com/api/v1/surveys" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"name": "Post-purchase", "is_active": true, "low_score_threshold": 6}'

# Add an NPS question to it
curl -X POST "https://your-domain.com/api/v1/survey-questions" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"survey_id": "<survey-id>", "type": "nps", "question_text": "How likely are you to recommend us?"}'

# Send an invitation (queues the email; track status on the returned record)
curl -X POST "https://your-domain.com/api/v1/survey-invitations" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"survey_id": "<survey-id>", "email": "customer@example.com"}'

# Auto-send 24h after a sales order ships
curl -X POST "https://your-domain.com/api/v1/survey-triggers" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"survey_id": "<survey-id>", "source_type": "sales_order", "delay_hours": 24}'

# Send a pre-appointment questionnaire
curl -X POST "https://your-domain.com/api/v1/questionnaire-invitations" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"appointment_id": "<appointment-id>"}'

survey-questions, survey-choices, survey-invitations, and survey-triggers are gated by the surveys module; questionnaire-invitations by the appointments module.