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

# InfoboardPostReadUsers

## Introduction

`InfoboardPostReadUsers` record an explicit read confirmation by a [User](/api-reference/users.md) for an [InfoboardPost](/api-reference/infoboard/infoboard-posts.md). Each record belongs to one user and one post and cannot be updated directly.

## Model Definition

**Relations**

| Key    | Relation                                                     | Type       | Relation Field(s) |
| ------ | ------------------------------------------------------------ | ---------- | ----------------- |
| `user` | [User](/api-reference/users.md)                              | Belongs to | `user_id`         |
| `post` | [InfoboardPost](/api-reference/infoboard/infoboard-posts.md) | Belongs to | `post_id`         |

## List by Post

List visible `InfoboardPostReadUsers` for one `InfoboardPost`.

**Definition**

<mark style="color:green;">`GET`</mark> `/api/infoboard/posts/{infoboardPost}/read-users`

**Route Parameters**

| Parameter       | Type                  | Description               |
| --------------- | --------------------- | ------------------------- |
| `infoboardPost` | `integer` \| `string` | InfoboardPost ID or hash. |

**Behavior**

* The parent post must be visible to the authenticated user.
* Internal intratool users are excluded.
* Without permission to see all post read users, records are limited to users from departments accessible to the authenticated user.

**Example Request**

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

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

{% endtab %}
{% endtabs %}

**Example Response**

```json
[
  {
    "id": 1,
    "user_id": 4,
    "post_id": 1,
    "created_at": "2026-08-06 10:20:00"
  },
  {
    "id": 2,
    "user_id": 5,
    "post_id": 1,
    "created_at": "2026-08-06 10:25:00"
  }
]
```

## Create

Record an explicit read confirmation by the authenticated user for an `InfoboardPost`.

**Definition**

<mark style="color:yellow;">`POST`</mark> `/api/infoboard/posts/{infoboardPost}/read-users`

**Route Parameters**

| Parameter       | Type                  | Description               |
| --------------- | --------------------- | ------------------------- |
| `infoboardPost` | `integer` \| `string` | InfoboardPost ID or hash. |

**Behavior**

* `post_id` is derived from the route and `user_id` from the authenticated user. The request body is discarded.
* Group accounts cannot create read confirmations.
* The operation is idempotent for the same user and post and returns the existing record on repeated requests.
* A matching `InfoboardPostSeenUser` is created first when missing, and matching post notifications are marked as seen and read.

**Example Request**

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

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

{% endtab %}
{% endtabs %}

**Example Response**

```json
{
  "status": "success",
  "data": {
    "id": 1,
    "user_id": 4,
    "post_id": 1,
    "created_at": "2026-08-06 10:20:00"
  }
}
```
