> ## Documentation Index
> Fetch the complete documentation index at: https://docs.renovationfind.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a customer feedback request

> Create a single customer feedback request.
Sends an email and/or SMS notification to the customer requesting feedback.




## OpenAPI

````yaml /openapi.yaml post /customer-feedback-system
openapi: 3.0.3
info:
  title: RenovationFind API
  description: >
    Public REST API for RenovationFind vendor integrations.


    ## Authentication

    All endpoints require a Bearer token in the `Authorization` header.

    Tokens are issued from the RenovationFind Manager Portal.


    ```

    Authorization: Bearer <your_jwt_token>

    ```


    ## Rate Limiting

    API requests are rate-limited to **250 requests per 5 minutes** per vendor.

    When exceeded, the API returns `429 Too Many Requests` with a `Retry-After`
    header.


    ## Response Format

    All responses follow a consistent envelope:

    ```json

    {
      "success": true,
      "data": { ... },
      "message": "Optional message"
    }

    ```

    On error:

    ```json

    {
      "success": false,
      "error": "Error description"
    }

    ```
  version: 1.0.0
  contact:
    name: RenovationFind
    url: https://www.renovationfind.com
servers:
  - url: https://www.renovationfind.com/rest-api-v1
    description: Production
security:
  - BearerAuth: []
paths:
  /customer-feedback-system:
    post:
      tags:
        - Customer Feedback
      summary: Create a customer feedback request
      description: >
        Create a single customer feedback request.

        Sends an email and/or SMS notification to the customer requesting
        feedback.
      operationId: createCfsRequest
      parameters:
        - name: skipDuplicates
          in: query
          required: false
          description: >-
            If true, silently skips when a duplicate email/phone already exists
            for this vendor.
          schema:
            type: boolean
            default: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - customerName
              description: >
                At least one of `email` or `phone` must be provided.

                Phone numbers are automatically normalized to xxx-xxx-xxxx
                format.
              properties:
                customerName:
                  type: string
                  description: Full name of the customer
                  example: John Doe
                email:
                  type: string
                  format: email
                  description: >-
                    Customer email address. If comma-separated, only the first
                    is used. At least one of email or phone is required.
                  example: john@example.com
                phone:
                  type: string
                  description: >-
                    Customer phone number. At least one of email or phone is
                    required. Automatically normalized to xxx-xxx-xxxx.
                  example: '5551234567'
            example:
              customerName: John Doe
              email: john@example.com
              phone: '5551234567'
      responses:
        '200':
          description: Duplicate detected and skipped (when skipDuplicates=true)
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
              example:
                success: true
                message: Duplicate request detected. Skipped.
        '201':
          description: customer feedback request created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    description: A customer feedback request
                    properties:
                      id:
                        type: integer
                        format: int64
                      customerName:
                        type: string
                      email:
                        type: string
                      phone:
                        type: string
                      dateCreated:
                        type: string
                        format: date-time
                      dateModified:
                        type: string
                        format: date-time
                      dateRequestSent:
                        type: string
                        format: date-time
                      deliveryStatus:
                        type: string
                        enum:
                          - PENDING
                          - SENT
                          - FAILED
                      config:
                        type: string
                        enum:
                          - FEEDBACK_REVIEW_REFERRAL
                          - FEEDBACK_REVIEW
                          - FEEDBACK_REFERRAL
                          - FEEDBACK
                      feedbackCompleted:
                        type: boolean
                      flaggedFeedback:
                        type: boolean
                        description: >-
                          Auto-flagged when satisfaction rating is POOR, FAIR,
                          or AVERAGE
                      satisfactionRating:
                        type: string
                        enum:
                          - POOR
                          - FAIR
                          - AVERAGE
                          - GOOD
                          - EXCELLENT
                        nullable: true
                      comments:
                        type: string
                        nullable: true
                      reviewCompleted:
                        type: boolean
                      googleReviewCompleted:
                        type: boolean
                      facebookReviewCompleted:
                        type: boolean
                      bbbReviewCompleted:
                        type: boolean
                      otherReviewCompleted:
                        type: boolean
                      referralCompleted:
                        type: boolean
                      referralByEmailTextCompleted:
                        type: boolean
                      referralByFbCompleted:
                        type: boolean
                      referralConversionCount:
                        type: integer
                        format: int64
        '403':
          description: Account not enabled for this feature
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
        '429':
          description: Rate limit exceeded (250 requests per 5 minutes)
          headers:
            Retry-After:
              schema:
                type: integer
                example: 300
              description: Seconds to wait before retrying
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  error:
                    type: string
              example:
                success: false
                error: >-
                  Rate limit exceeded. Maximum 250 requests per 5 minutes.
                  Please retry later.
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token issued from the RenovationFind Manager Portal

````