---
title: "Record Nps Response"
method: POST
path: "/api/nps/response"
tags: ["nps"]
---

# Record Nps Response

`POST /api/nps/response`

## Request

- Base URL: `https://api.ruzora.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ruzora.com/api/nps/response`
- Auth: none declared

Record NPS survey response and trigger automated actions.

**Public endpoint** - No authentication required (survey responses come
from the /nps/[placement_id] page linked in survey emails).

**Actions by Score:**
- **9-10 (Promoter):** Slack celebration + referral-request task (+24h)
- **7-8 (Passive):** Slack note + follow-up task (+3 days)
- **0-6 (Detractor):** URGENT Slack alert + founder-call-today task

Rewritten for Neon (R2 Wave 1, Epic 1.4a) — the previous version wrote
Airtable-era field names ("NPS_Score", "Client") that NeonService's
strict column allow-lists silently dropped, so no response was ever
actually saved.

`is_smoke=true` = prod-smoke dry-run: validates the placement, returns
the category, writes nothing, pings nobody.

## Request body

- NPSResponseCreate: NPS survey response submission
  - `placement_id` string, required: Placement ID
  - `score` integer, required: NPS score from 0-10
  - `comment` string, nullable: Optional feedback comment
  - `survey_type` '30_day' | '90_day' | '180_day' | 'annual', required: Which milestone survey this is
  - `respondent_email` string, nullable: Email of person responding
  - `is_smoke` boolean: Prod-smoke dry-run: validates the placement and returns the category, but writes nothing and pings nobody. Keeps synthetic responses out of real NPS stats.

## Response `200`

Successful Response

- NPSResponse: NPS response with calculated category
  - `placement_id` string, required
  - `score` integer, required
  - `category` 'Promoter' | 'Passive' | 'Detractor', required
  - `comment` string, nullable
  - `survey_type` string, required
  - `response_date` string, date-time, required
  - `actions_triggered` string[]: Actions taken based on score

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/ruzora/apis/ruzora-candidate-crm-api.md) · [All operations](https://skmtc.dev/ruzora/apis/ruzora-candidate-crm-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ruzora/apis/ruzora-candidate-crm-api/revisions/f9b8223f3ac4?raw)
