> For the complete documentation index, see [llms.txt](https://api-docs.intratool.help/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api-docs.intratool.help/api-reference/manual/manual-entry-seen-users.md).

# ManualEntrySeenUsers

## Introduction

`ManualEntrySeenUsers` record when a [User](/api-reference/users.md) views a [ManualEntry](/api-reference/manual/manual-entries.md). A user has at most one effective seen record per entry because the create endpoint is idempotent.

## Model Definition

**Relations**

| Key           | Relation                                               | Type       | Relation Field(s) |
| ------------- | ------------------------------------------------------ | ---------- | ----------------- |
| `user`        | [User](/api-reference/users.md)                        | Belongs to | `user_id`         |
| `manualEntry` | [ManualEntry](/api-reference/manual/manual-entries.md) | Belongs to | `manual_entry_id` |

## List by ManualEntry

List `ManualEntrySeenUsers` visible for a `ManualEntry`.

**Definition**

<mark style="color:green;">`GET`</mark> `/api/manual/entries/{manualEntry}/seen-users`

**Route Parameters**

| Parameter     | Type                  | Description                    |
| ------------- | --------------------- | ------------------------------ |
| `manualEntry` | `integer` \| `string` | ManualEntry ID, hash, or slug. |

**Behavior**

* The user must be able to show the parent entry.
* intratool accounts are excluded. Without the permission to see all entry seen users, the result is limited to users in allowed departments.

**Example Request**

{% tabs %}
{% tab title="PHP" %}

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://{tenant}.intratool.de']);
$response = $client->request('GET', '/api/manual/entries/1/seen-users', [
    'headers' => ['Authorization' => "Bearer {accessToken}"]
]);
```

{% endtab %}
{% endtabs %}

**Example Response**

```json
[
  {
    "id": 1,
    "user_id": 3,
    "manual_entry_id": 1,
    "created_at": "2026-08-06 09:30:00"
  },
  {
    "id": 2,
    "user_id": 4,
    "manual_entry_id": 1,
    "created_at": "2026-08-06 09:35:00"
  }
]
```

## Mark as Seen

Mark a `ManualEntry` as seen by the current authenticated `User`.

**Definition**

<mark style="color:yellow;">`POST`</mark> `/api/manual/entries/{manualEntry}/seen-users`

**Route Parameters**

| Parameter     | Type                  | Description                    |
| ------------- | --------------------- | ------------------------------ |
| `manualEntry` | `integer` \| `string` | ManualEntry ID, hash, or slug. |

**Behavior**

* `user_id` comes from authentication and `manual_entry_id` comes from the route; request-body values are ignored.
* Repeated requests return the existing record instead of creating duplicates.
* Creating the record marks notifications for the entry as read, which also marks those notifications as seen.

**Example Request**

{% tabs %}
{% tab title="PHP" %}

```php
$client = new GuzzleHttp\Client(['base_uri' => 'https://{tenant}.intratool.de']);
$response = $client->request('POST', '/api/manual/entries/1/seen-users', [
    'headers' => ['Authorization' => "Bearer {accessToken}"]
]);
```

{% endtab %}
{% endtabs %}

**Example Response**

```json
{
  "status": "success",
  "data": {
    "id": 1,
    "user_id": 3,
    "manual_entry_id": 1,
    "created_at": "2026-08-06 09:30:00"
  }
}
```
