# Submit a CSAT rating

Record a customer's satisfaction rating for a conversation, with an optional free-text
remark.
Fin decides *when* to ask for a rating — this reuses the CSAT settings on your Fin
workflow, not this API. When Fin asks, it fires a `csat_requested` event over webhooks or
SSE carrying the rating options to show the user. Present those options, then submit the
user's choice here.
Submitting the same rating again, with no new remark, is a no-op and stays successful,
so an at-least-once client can safely retry. Submitting a *different* rating updates the
stored rating while the update window is still open, and a first remark can be added to
an already-rated survey. Once a remark has been recorded the rating is locked and can no
longer be changed.
Please reach out to your accounts team to discuss access.

Endpoint: POST /fin/csat
Version: 2.16
Security: bearerAuth

## Header parameters:

  - `Intercom-Version` (string)

## Request fields (application/json):

  - `conversation_id` (string, required)
    Your external conversation ID — the same ID you started the conversation with, and the one echoed on the `csat_requested` event.
    Example: ext-123

  - `rating` (string, required)
    The rating the user selected — one of the `key` values from the `csat_requested` event's options.
    Enum: "terrible", "bad", "ok", "good", "amazing"

  - `remark` (string)
    Optional free-text comment the user left alongside the rating. Can be added to an already-rated survey, but only once — the rating locks after a remark is recorded.
    Example: Fin solved my problem in seconds.

## Response 200 fields (application/json):

  - `conversation_id` (string)
    The external ID of the rated conversation.
    Example: ext-123

  - `rating` (string)
    The rating now recorded on the conversation.
    Enum: "terrible", "bad", "ok", "good", "amazing"

  - `status` (string)
    The result of the submission.
    Enum: "rated"

## Response 401 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

