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

# Get conversation

> Fetch one public conversation by ID. Returns the same shape as a single item from List conversations.

Returns one conversation record by ID for the workspace tied to your API key. The response shape is identical to a single entry in [List conversations](/en/api-reference/list-conversations): same fields, same nested `events[]` objects, and the same public article, folder, tag, and attachment semantics.

<Tip>
  Use [List conversations](/en/api-reference/list-conversations) to discover conversation IDs and page through history. Use [Generate Answer](/en/api-reference/generate-answer) to send a new turn into Fini.
</Tip>

## Headers

<ParamField header="Authorization" type="string" required>
  Bearer token containing your Fini workspace API key. Format: `Bearer fini_...` The key needs `read` scope.
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>
  Conversation ID to fetch. Get this from [List conversations](/en/api-reference/list-conversations). The public [Generate Answer](/en/api-reference/generate-answer) response is event-only, so use the list route if you need to discover a newly created conversation ID.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api-prod.usefini.com/v2/hc-interactions/0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8/public' \
    --header 'Authorization: Bearer fini_your_api_key'
  ```

  ```python Python theme={null}
  import requests

  conversation_id = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8"
  response = requests.get(
      f"https://api-prod.usefini.com/v2/hc-interactions/{conversation_id}/public",
      headers={"Authorization": "Bearer fini_your_api_key"},
  )
  conversation = response.json()
  ```

  ```javascript Node.js theme={null}
  const conversationId = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8";

  const response = await fetch(
    `https://api-prod.usefini.com/v2/hc-interactions/${conversationId}/public`,
    {
      headers: {
        Authorization: "Bearer fini_your_api_key",
      },
    }
  );
  const conversation = await response.json();
  ```
</RequestExample>

## Response

The response is a single `PublicConversation` object. See [List conversations → PublicConversation](/en/api-reference/list-conversations#nested-objects) for the full field reference and nested object definitions.

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "id": "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8",
    "createdAt": 1747075200000,
    "source": "api",
    "channel": "chat",
    "status": "Escalated to Human Agent",
    "externalId": null,
    "url": "https://app.usefini.com/dashboard/inbox/0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8",
    "subjectPreview": "Where is my order?",
    "hasFeedback": false,
    "resolved": null,
    "userAttributes": {
      "email": "customer@example.com"
    },
    "usedArticles": [
      {
        "id": "7f5392e5-dc7d-4558-8860-cf3ea4b32f94",
        "title": "Track your order",
        "documentUrl": null
      }
    ],
    "usedSubfolders": [],
    "events": [
      {
        "id": "cc0e1592-4b71-4f57-bf9c-1b10a6b7b71a",
        "createdAt": 1749640953000,
        "role": "user",
        "type": "message",
        "message": "Where is my order?",
        "externalId": null,
        "externalCreatedAt": null,
        "csatRating": null,
        "feedback": null,
        "approved": null,
        "resolved": null,
        "attachments": [],
        "tags": [],
        "usedArticles": []
      },
      {
        "id": "da370d54-5d2a-4b38-b99d-8b5c5f77bff7",
        "createdAt": 1749640955000,
        "role": "finibot",
        "type": "message",
        "message": "I can help with that. What is your order number?",
        "externalId": null,
        "externalCreatedAt": null,
        "csatRating": null,
        "feedback": null,
        "approved": null,
        "resolved": null,
        "attachments": [],
        "tags": [],
        "usedArticles": [
          {
            "id": "7f5392e5-dc7d-4558-8860-cf3ea4b32f94",
            "title": "Track your order",
            "documentUrl": null
          }
        ]
      }
    ]
  }
  ```

  ```json 401 Unauthorized theme={null}
  {
    "statusCode": 401,
    "message": "Invalid or revoked API key",
    "error": "Unauthorized"
  }
  ```

  ```json 403 Forbidden theme={null}
  {
    "statusCode": 403,
    "message": "API key does not have the required scope for this operation",
    "error": "Forbidden"
  }
  ```
</ResponseExample>

<Note>
  Current controller behavior: unknown, already-deleted, or inaccessible conversation IDs surface as `500 Internal Server Error` on this public route rather than a dedicated `404 Not Found`.
</Note>

## Errors

<AccordionGroup>
  <Accordion title="401 Unauthorized" icon="lock">
    The API key is missing, malformed, revoked, or invalid. Confirm you are sending `Authorization: Bearer fini_...` with the full key.
  </Accordion>

  <Accordion title="403 Forbidden" icon="shield-halved">
    The API key does not include the `read` scope required for this route.
  </Accordion>

  <Accordion title="500 Internal Server Error" icon="triangle-exclamation">
    Fini failed while loading the conversation. Unknown, already-deleted, or workspace-mismatched IDs currently surface here on the public route as well.
  </Accordion>
</AccordionGroup>
