> ## 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 replay events

> Fetch the events for one replay conversation.

Returns the formatted events for one replay conversation. Use this after [Get replay](/en/api-reference/get-replay) when you need the replayed messages and execution details rather than only the replay conversation metadata.

## 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>
  Replay conversation ID whose events you want to fetch.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api-prod.usefini.com/v2/replays/9d4bbcf7-e7e1-44a6-9a64-ff0a12dfe625/events/public' \
    --header 'Authorization: Bearer fini_your_api_key'
  ```

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

  replay_id = "9d4bbcf7-e7e1-44a6-9a64-ff0a12dfe625"
  response = requests.get(
      f"https://api-prod.usefini.com/v2/replays/{replay_id}/events/public",
      headers={"Authorization": "Bearer fini_your_api_key"},
  )
  events = response.json()
  ```

  ```javascript Node.js theme={null}
  const replayId = "9d4bbcf7-e7e1-44a6-9a64-ff0a12dfe625";

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

## Response

Returns an array of formatted event objects.

<ResponseField name="id" type="string">
  Event ID.
</ResponseField>

<ResponseField name="interactionId" type="string">
  Replay conversation ID that owns the event.
</ResponseField>

<ResponseField name="role" type="enum">
  Event sender role, such as `user` or `finibot`.
</ResponseField>

<ResponseField name="content" type="string">
  Message content for the event, when present.
</ResponseField>

<ResponseField name="originalEventId" type="string">
  Original conversation event copied into or referenced by the replay, when present.
</ResponseField>

<ResponseExample>
  ```json 200 OK theme={null}
  [
    {
      "id": "0b3a0bf5-c044-487f-93c3-fd4a8452fe96",
      "companyId": "6bc9f4f8-3564-4a9c-8cc0-ea1f1dd66c2d",
      "botId": "2a1cf0f0-f35d-46ad-8e61-a15c86b2b312",
      "interactionId": "9d4bbcf7-e7e1-44a6-9a64-ff0a12dfe625",
      "role": "user",
      "type": "message",
      "createdAt": "2026-07-30T12:18:03.511Z",
      "content": "How do refunds work?",
      "externalCreatedAt": 1785416132511
    },
    {
      "id": "69e64e28-6fd7-47ab-806d-f573a975188f",
      "companyId": "6bc9f4f8-3564-4a9c-8cc0-ea1f1dd66c2d",
      "botId": "2a1cf0f0-f35d-46ad-8e61-a15c86b2b312",
      "interactionId": "9d4bbcf7-e7e1-44a6-9a64-ff0a12dfe625",
      "role": "finibot",
      "type": "message",
      "createdAt": "2026-07-30T12:18:14.904Z",
      "content": "Refunds are available within 30 days.",
      "originalEventId": "f61a9a11-2c3b-4704-8f57-7078854d87cf"
    }
  ]
  ```
</ResponseExample>

## Errors

<AccordionGroup>
  <Accordion title="401 Unauthorized" icon="lock">
    The API key is missing, malformed, revoked, or invalid.
  </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 events for the replay conversation.
  </Accordion>
</AccordionGroup>
