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

# Bulletins

> Read and manage bulletins — announcements posted to a tour.

**Bulletins** are announcements posted to a tour day. They can be pinned and can trigger a notification to tour members. Bulletin IDs are string/ID values.

All endpoints require the standard [authentication](/authentication) headers.

***

## List bulletins

```text theme={null}
GET /v1/tours/{tourId}/bulletins
```

Returns the bulletins for a tour.

**Scope:** `bulletins.read`

**Example**

```bash theme={null}
curl "$BASE/v1/tours/2f1c…/bulletins" \
  -H "x-api-key: $KEY" -H "x-api-secret: $SECRET" -H "Authorization: Bearer $TOKEN"
```

**Path parameters**

| Name     | Type          | Description |
| -------- | ------------- | ----------- |
| `tourId` | string (UUID) | The tour.   |

**Response `data`** — array of bulletins:

```json theme={null}
{
  "id": "a8e2…",
  "title": "Schedule change",
  "body": "Doors now at 7pm",
  "is_edited": false,
  "is_pinned": true,
  "has_notification": true,
  "notification_has_sent": true,
  "day_id": 1843,
  "tour_id": "2f1c…",
  "posted_at": "2026-05-20T08:00:00Z",
  "created_at": "2026-05-20T08:00:00Z",
  "updated_at": "2026-05-20T08:00:00Z",
  "is_deleted": false,
  "created_by": { "id": "…", "firstname": "Jane", "lastname": "Doe", "email": "jane@…", "image": "https://…" }
}
```

***

## Create a bulletin

```text theme={null}
POST /v1/bulletins
```

**Scope:** `bulletins.write`

**Body**

| Field             | Type    | Required | Description                              |
| ----------------- | ------- | -------- | ---------------------------------------- |
| `dayId`           | number  | Yes      | Day to post the bulletin on.             |
| `title`           | string  | Yes      | Bulletin title.                          |
| `body`            | string  | Yes      | Bulletin content.                        |
| `isPinned`        | boolean | Yes      | Whether to pin the bulletin.             |
| `hasNotification` | boolean | Yes      | Whether to notify tour members.          |
| `scheduledFor`    | string  | No       | Schedule the bulletin for a future time. |

<Note>
  Create takes `dayId` (camelCase, not `day_id` or `tour_id`); the tour is resolved from the day. See [Field naming](/introduction#field-naming) for the snake\_case vs camelCase conventions across resources.
</Note>

**Response `data`:** `{ "bulletin_id": "a8e2…" }`.

***

## Update a bulletin

```text theme={null}
PUT /v1/bulletins/{bulletinId}
```

**Scope:** `bulletins.write`

**Path parameters**

| Name         | Type        | Description             |
| ------------ | ----------- | ----------------------- |
| `bulletinId` | string (ID) | The bulletin to update. |

**Body** — all optional; send only what changes.

| Field             | Type    | Description        |
| ----------------- | ------- | ------------------ |
| `title`           | string  | Bulletin title.    |
| `body`            | string  | Bulletin content.  |
| `isPinned`        | boolean | Pin state.         |
| `hasNotification` | boolean | Notification flag. |
| `scheduledFor`    | string  | Scheduled time.    |

<Note>
  The `bulletinId` is taken from the URL path — do **not** send it in the request body.
</Note>

**Response `data`:** none.

***

## Delete a bulletin

```text theme={null}
DELETE /v1/bulletins/{bulletinId}
```

Soft-deletes the bulletin.

**Scope:** `bulletins.write`

**Path parameters**

| Name         | Type        | Description             |
| ------------ | ----------- | ----------------------- |
| `bulletinId` | string (ID) | The bulletin to delete. |

**Response `data`:** none.

***

See also: [Tours](/endpoints/tours), [Guest List](/endpoints/guest-list).
