---
title: "JSON API — Notifications for Laravel | Roundly"
description: "Voliteľné JSON API — všetkých 11 routes pre schránku, preferencie a druhy prihláseného používateľa s filtrami, telami, chybami a resources."
url: https://roundly-consulting.com/sk/open-source/navody/notifications-for-laravel/json-api
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Notifications for Laravel](https://roundly-consulting.com/sk/open-source/navody/notifications-for-laravel.md)

# JSON API

Predvolene vypnuté. Zapnite ho pred štartom aplikácie:

```bash
NOTIFICATIONS_ROUTES_ENABLED=on
```

```php
// config/notifications.php
'routes' => [
    'enabled' => env('NOTIFICATIONS_ROUTES_ENABLED', 'off'),
    'prefix' => 'notifications',
    'middleware' => ['api'],
    'auth_middleware' => ['auth:sanctum'],
],
```

Každý endpoint pracuje len s $request->user() — parameter príjemcu neexistuje. Bez používateľa, aj pri prázdnom auth\_middleware, je odpoveď 401. Vstupy idú cez FormRequesty a rate limity si doplníte sami. Názvy route začínajú na notifications. Ak chcete routes zmeniť, publikujte súbor — kópia potom nahradí súbor balíka:

```bash
php artisan vendor:publish --tag="notifications-routes"   # routes/notifications.php replaces the package's file
```

## Routes

| Metóda + cesta | Názov | Čo robí |
| --- | --- | --- |
| `GET /inbox` | `inbox.index` | filter\[status\]=active\|unread\|read\|archived\|all, filter\[context\], filter\[category\], filter\[type\], per\_page → stránkovaný InboxItemResource. |
| `GET /inbox/counts` | `inbox.counts` | InboxCountsResource: unread, total, contexts\[{key, label, unread}\]. |
| `POST /inbox/read-all` | `inbox.read-all` | Telo context?, category?, type? → {"marked": n}. |
| `POST /inbox/{item}/read` | `inbox.read` | Označí ako prečítané → {"data": item}. |
| `DELETE /inbox/{item}/read` | `inbox.unread` | Označí ako neprečítané → {"data": item}. |
| `POST /inbox/{item}/archive` | `inbox.archive` | Archivuje → {"data": item}. |
| `DELETE /inbox/{item}/archive` | `inbox.unarchive` | Vráti z archívu → {"data": item}. |
| `POST /inbox/{item}/acknowledge` | `inbox.acknowledge` | Potvrdí subjekt a druh položky → {"acknowledged": n}; 404, ak používateľ subjekt už nevidí; {"acknowledged": 0} pre položku bez subjektu. |
| `GET /preferences` | `preferences.show` | PreferencesResource: druhy s kanálmi (enabled, default, locked, locked\_reason), digest, quiet\_hours, timezone. |
| `PATCH /preferences` | `preferences.update` | channels\[<type>\]\[<channel>\]=bool, categories\[<category>\]\[<channel>\]=bool, digest{frequency,time}, quiet\_hours{start,end}\|null, timezone\|null — všetko alebo nič. |
| `GET /types` | `types.index` | Zoznam TypeResource pre obrazovku nastavení: key, category, label, description, channels, mandatory, priority, digestible. |

```http
GET    /notifications/inbox?filter[status]=unread&filter[context]=company:3&per_page=20
GET    /notifications/inbox/counts
POST   /notifications/inbox/read-all          {"context": "company:3", "category": "requests"}
POST   /notifications/inbox/12/read
DELETE /notifications/inbox/12/read
POST   /notifications/inbox/12/archive
DELETE /notifications/inbox/12/archive
POST   /notifications/inbox/12/acknowledge
GET    /notifications/preferences
PATCH  /notifications/preferences             {"channels": {"comment.posted": {"mail": false}}, "quiet_hours": {"start": "22:00", "end": "07:00"}}
GET    /notifications/types
```

{item} sa hľadá v schránke používateľa, nikdy cez globálny route-model binding: id iného používateľa alebo chybné id je 404:

```json
{ "message": "The notification was not found.", "code": "inbox_item_not_found" }
```

POST /inbox/{item}/acknowledge najprv znova overí prístup: používateľ, ktorý k subjektu stratil prístup — alebo ktorého položka má zmazaný subjekt či nezaregistrovaný druh — dostane rovnakú 404, takže stará položka nikdy neumlčí eskaláciu, na ktorú sa spoliehajú ostatní.

## PATCH /preferences

Všetko alebo nič: požiadavka zostaví jeden PreferencesUpdate a zavolá preferences($user)->update(). Prepínače kategórií: false stlmí, true stlmenie zruší; quiet\_hours: null a timezone: null ich zrušia:

```json
{
  "channels": { "comment.posted": { "mail": false } },
  "categories": { "contracts": { "mail": false } },
  "digest": { "frequency": "daily", "time": "08:00" },
  "quiet_hours": { "start": "22:00", "end": "07:00" },
  "timezone": "Europe/Bratislava"
}
```

Každá časť sa overí skôr, než sa čokoľvek zapíše; odmietnutá časť je validačná chyba Laravelu pod svojím poľom a neuloží sa nič:

```json
{ "message": "The notification \"security.alert\" is required and cannot be switched off. (and 1 more error)",
  "errors": { "channels.security.alert.mail": ["The notification \"security.alert\" is required and cannot be switched off."],
              "categories.junk": ["The notification category \"junk\" is not used by any registered type."] } }
```

| Pole | Odmietne sa, keď |
| --- | --- |
| `channels.<type>` | Nezaregistrovaný druh alebo iný kanál než inbox / mail. |
| `channels.<type>.<channel>` | Vypnutý povinný druh. |
| `categories.<category>` | Kategória, ktorú žiadny zaregistrovaný druh nepoužíva, alebo neznámy kanál. |
| `quiet_hours / timezone` | Zlý čas alebo neznáme časové pásmo; null ich zruší. |

## Chyby

| Stav | Význam |
| --- | --- |
| 401 | Žiadny prihlásený používateľ — aj pri prázdnom auth\_middleware. |
| 404 inbox\_item\_not\_found | Položka iného používateľa, chybné id alebo potvrdenie, ktoré používateľ už nesmie urobiť. |
| 422 | Validačné chyby Laravelu; doménové výnimky s preloženou správou a stabilným kódom — mandatory\_notification, invalid\_quiet\_hours, invalid\_timezone, unknown\_type, unknown\_notification\_category, invalid\_data. |

## Položka schránky

```json
{
  "id": 12, "type": "request.awaiting_approval", "category": "requests", "title": "…", "body": null,
  "url": "https://app.test/requests/9", "count": 10, "data": {"reference": "PR-9"},
  "actor": {"id": 4, "type": "User"}, "subject": {"id": 9, "type": "PurchaseRequest"},
  "context": {"key": "company:3", "label": "Acme s.r.o.", "id": 3, "type": "Company"},
  "priority": {"value": "normal", "label": "Normal"}, "read_at": null, "archived_at": null,
  "first_event_at": "2026-11-09T10:00:00+00:00", "last_event_at": "2026-11-09T10:04:31+00:00"
}
```

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/notifications-for-laravel.md)
