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

# Mark a conversation as read or unread

> Change the read state of one conversation in your LinkedIn inbox.

> [!CAUTION]
>
> This changes your real LinkedIn inbox. Marking a conversation as read can also tell the other person you saw their message.

## What this call does

| | |
| - | - |
| **LinkedIn** | Live write: may send a read receipt |
| **Your CRM** | None |
| **Also** | LinkedIn may refuse marking as unread |
| **Repeating it** | Safe to repeat. |

## Good to know

* One conversation per call. Do not loop over your inbox: LinkedIn limits this action, at around 100 a day, and Groovin does not enforce that for you.

Your AI assistant reaches the same action through the MCP tool `set_linkedin_chat_read_status`.


## OpenAPI

````yaml reference/openapi.json POST /linkedin/chat-read-status
openapi: 3.1.0
info:
  title: Groovin API
  version: 1.0.0
  description: >-
    Connect LinkedIn and your CRM. Every call acts on your real LinkedIn account
    and CRM: there is no test mode.
servers:
  - url: https://api.groovin.ai/functions/v1/api/v1
security:
  - apiKey: []
tags:
  - name: LinkedIn
  - name: CRM contacts and companies
  - name: LinkedIn connections import
paths:
  /linkedin/chat-read-status:
    post:
      tags:
        - LinkedIn
      summary: Mark a conversation as read or unread
      description: Change the read state of one conversation in your LinkedIn inbox.
      operationId: set_linkedin_chat_read_status
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                conversation_id:
                  type: string
                  description: >-
                    The conversation to change, from
                    `linkedin/conversation-attendees`.
                read:
                  type: boolean
                  description: >-
                    `true` marks it as read. `false` marks it as unread, which
                    LinkedIn may refuse.
                org_linkedin_account_id:
                  type: integer
                  description: >-
                    Leave this out to use your own LinkedIn account. Another
                    person's account is refused with a 403.
              required:
                - conversation_id
                - read
            examples:
              placeholder:
                summary: Replace every value
                value:
                  conversation_id: REPLACE_WITH_CONVERSATION_ID
                  read: true
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetChatReadStatusResult'
              example:
                org_linkedin_account_id: 4821
                conversation_id: example-conversation-id
                read: true
                unread_count_before: 2
                updated: true
        '400':
          description: 'Something in the request is wrong: `error` says what.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The API key is missing, wrong or revoked.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Your account cannot do this: no CRM connected, inactive
            subscription, Billing admin role, or a teammate's LinkedIn account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            What you asked for does not exist, or your LinkedIn account is not
            connected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: LinkedIn or your CRM is slowing you down. Wait at least 5 minutes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Something failed on our side.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: >-
            LinkedIn or your CRM could not be reached or gave an unreadable
            answer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    SetChatReadStatusResult:
      type: object
      description: The chat's new state.
      required:
        - org_linkedin_account_id
        - conversation_id
        - read
        - unread_count_before
        - updated
      properties:
        org_linkedin_account_id:
          type: integer
          description: Groovin's id for the LinkedIn account this answer is about.
        conversation_id:
          type: string
          description: The chat that was changed.
        read:
          type: boolean
          description: The state you asked for.
        unread_count_before:
          type:
            - integer
            - 'null'
          description: >-
            Unread messages known just before the change. A hint, not proof of
            the previous state.
        updated:
          const: true
          description: Always `true` on success.
    Error:
      type: object
      description: >-
        What every failed request answers, with an HTTP status. The text can
        change: decide what to do from the status, and show the text to a
        person.
      required:
        - error
      properties:
        error:
          type: string
          description: What went wrong, and sometimes what to do next.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        Your Groovin API key (`gv_live_…`), created in the extension under
        Settings, MCP and API.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.