# 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
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.
To request access to the Fin Agent API, go to **Settings > Integrations > Fin Agent API** in your workspace and tell us about your use case. Once access is granted, **Fin Agent API** appears under **Fin AI Agent > Deploy**.

Endpoint: POST /fin/csat
Version: 2.15
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

