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

# Retrieve a ticket

> GET /v1/tickets/{id} — fetch a single ticket with its conversations embedded

Returns a single ticket by its ID, with all of its conversations embedded — the primary conversation with the requester plus any side conversations (e.g. a thread with a supplier). Fetch each conversation's messages via [List messages](/api-reference/conversations/messages).

```http theme={null}
GET /v1/tickets/{id}
```

## Authentication

Bearer token in the `Authorization` header. See [Authentication](/api-reference/authentication).

```http theme={null}
Authorization: Bearer rfl_live_...
```

## Path parameters

<ParamField path="id" type="string" required>
  Ticket ID prefixed with `ti_`.
</ParamField>

## Response

Returns a [`Ticket` object](/api-reference/tickets/list#the-ticket-object) with one extra field:

<ResponseField name="conversations" type="array">
  Every conversation on the ticket, ordered by `createdAt` ascending. Exactly
  one has `role: "primary"`.

  <Expandable title="The Conversation object">
    <ResponseField name="id" type="string">Conversation ID prefixed with `conv_`.</ResponseField>
    <ResponseField name="object" type="string">Always `"conversation"`.</ResponseField>
    <ResponseField name="ticketId" type="string">The owning ticket's ID.</ResponseField>
    <ResponseField name="role" type="string">`primary` (the requester's thread) or `side` (an isolated thread with another party).</ResponseField>
    <ResponseField name="status" type="string">Current thread status. One of `waiting_for_user`, `needs_first_response`, `needs_follow_up`, `scheduled_ai_response`, `assumed_resolved`, `resolved`, `spam`, `paused`, `investigating`, `archived`.</ResponseField>
    <ResponseField name="createdAt" type="string">ISO 8601 UTC timestamp of thread creation.</ResponseField>
    <ResponseField name="updatedAt" type="string">ISO 8601 UTC timestamp of the most recent update.</ResponseField>
  </Expandable>
</ResponseField>

## Examples

### Fetch a ticket

<CodeGroup>
  ```bash curl theme={null}
  curl https://api.replyful.com/v1/tickets/ti_8kNwq2Tt7yGkX9wM4bDfP \
    -H "Authorization: Bearer rfl_live_..."
  ```

  ```ts Node.js theme={null}
  const res = await fetch(
    "https://api.replyful.com/v1/tickets/ti_8kNwq2Tt7yGkX9wM4bDfP",
    { headers: { Authorization: `Bearer ${process.env.REPLYFUL_API_KEY}` } },
  );
  const ticket = await res.json();
  ```

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

  res = requests.get(
      "https://api.replyful.com/v1/tickets/ti_8kNwq2Tt7yGkX9wM4bDfP",
      headers={"Authorization": f"Bearer {os.environ['REPLYFUL_API_KEY']}"},
  )
  res.raise_for_status()
  ticket = res.json()
  ```
</CodeGroup>

```json Response theme={null}
{
  "id": "ti_8kNwq2Tt7yGkX9wM4bDfP",
  "object": "ticket",
  "title": "Refund request",
  "status": "open",
  "requester": {
    "id": "con_9dKmT3xWq6bYrN8cJfA2eH4gp",
    "name": "Ada Lovelace",
    "email": { "email": "ada@example.com", "verified": true }
  },
  "tags": [
    { "id": "tag_7fQwXk3mB9tRc2Ns6", "name": "vip" }
  ],
  "topics": [
    { "id": "tpc_4mHbW8xKq2eYd7Tf3", "name": "Billing" }
  ],
  "estimatedScore": null,
  "createdAt": "2026-04-29T14:30:00Z",
  "updatedAt": "2026-04-29T15:10:00Z",
  "conversations": [
    {
      "id": "conv_x7Kw2mQb9tRfN4c",
      "object": "conversation",
      "ticketId": "ti_8kNwq2Tt7yGkX9wM4bDfP",
      "role": "primary",
      "status": "waiting_for_user",
      "createdAt": "2026-04-29T14:30:00Z",
      "updatedAt": "2026-04-29T14:32:00Z"
    },
    {
      "id": "conv_p3Tf8xWq2mKb6rN",
      "object": "conversation",
      "ticketId": "ti_8kNwq2Tt7yGkX9wM4bDfP",
      "role": "side",
      "status": "needs_follow_up",
      "createdAt": "2026-04-29T15:00:00Z",
      "updatedAt": "2026-04-29T15:10:00Z"
    }
  ]
}
```

## Error responses

| Status | `error.code`             | When                                                          |
| ------ | ------------------------ | ------------------------------------------------------------- |
| `401`  | `missing_api_key`        | The `Authorization` header is absent.                         |
| `401`  | `invalid_api_key`        | The token is malformed, unknown, or archived.                 |
| `404`  | `ticket_not_found`       | The ticket does not exist or belongs to another organization. |
| `422`  | `invalid_path_parameter` | The `id` path parameter is not a valid `ti_…` ID.             |
| `429`  | `too_many_requests`      | Rate limit exceeded. Honor `Retry-After`.                     |

See [Errors](/api-reference/errors) for the full error envelope reference.
