---
title: "Get a paged list of notifications for the current user."
method: GET
path: "/api/Notifications"
tags: ["Notifications"]
---

# Get a paged list of notifications for the current user.

`GET /api/Notifications`

## Request

- Base URL: `https://api.3dprintlog.com`
- URL: `https://api.3dprintlog.com/api/Notifications`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://3dprintlog.auth0.com/authorize`, token URL `https://3dprintlog.auth0.com/oauth/token`)
  - API key in header `X-Api-Key`
  - API key in query parameter `api_key`

## Query parameters

- `PageNumber` integer
- `PageSize` integer
- `unreadOnly` boolean
- `type` 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8: Sent as an integer: `1` = Comment, `2` = PrintCompleted, `3` = PrintFailed, `4` = Achievement, `5` = SystemAnnouncement, `6` = SubscriptionActivated, `7` = SubscriptionPaymentFailed, `8` = SubscriptionCanceled.

## Response `200`

A paged list of notifications.

- PrintLogApiModelsPagedListOfPrintLogApiModelsDTOsNotificationNotificationSummaryDto: `[ImmutableObject(true)]` is here for HybridCache and nothing else. It is inert at runtime; the attribute is how HybridCache is told it may hand the same instance to every caller instead of storing a serialized copy in L1 and deserializing it on each hit. Without it a cache <i>hit</i> would pay a full JSON deserialize. That is the cost #66 declined to spend on the serialize side, and it would land on the endpoints whose expensive part — the SQL aggregation — the cache already skips. <b>Be clear about what it does and does not claim.</b> This type is mutable — both properties have setters and `Items` is a mutable `List<T>` — so the attribute is a statement of convention, not a property the compiler enforces: nothing mutates a `PagedList` it read out of the cache, and nothing may start. What it is not is a new risk. A cached `PagedList` was already shared by reference across concurrent requests under plain `IMemoryCache`; the attribute keeps that exact behaviour rather than introducing it. The only alternative is letting HybridCache serialize and re-deserialize per hit, which is a real cost paid on every request to buy protection against a mutation that does not happen. Treat anything returned from a cache lookup as read-only, and if a caller ever genuinely needs to mutate one, copy it first.
  - `paging` PrintLogApiModelsPageInfo
    - `currentPage` integer
    - `totalPages` integer
    - `pageSize` integer
    - `totalCount` integer
  - `items` PrintLogApiModelsDTOsNotificationNotificationSummaryDto[], nullable
    - `id` string, uuid
    - `type` 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8: Sent as an integer: `1` = Comment, `2` = PrintCompleted, `3` = PrintFailed, `4` = Achievement, `5` = SystemAnnouncement, `6` = SubscriptionActivated, `7` = SubscriptionPaymentFailed, `8` = SubscriptionCanceled.
    - `title` string, nullable
    - `message` string, nullable
    - `isRead` boolean
    - `createdDate` string, date-time: UTC, with an explicit offset. A bare DateTime serializes without a designator, and JavaScript reads a designator-less ISO string as local time — which silently shifted every notification timestamp in the web and mobile clients by the viewer's offset.
    - `actionUrl` string, nullable
    - `printId` integer, nullable
    - `printTitle` string, nullable
    - `triggeredByUser` PrintLogApiModelsDTOsUserUserSummaryDto
      - `id` integer
      - `profilePicture` string, nullable: URL pointing to the user's profile picture.
      - `coverPicture` string, nullable: URL pointing to the user's cover picture.
      - `displayName` string, nullable
    - `achievement` PrintLogApiModelsDTOsNotificationAchievementNotificationDto: The typed form of an PrintLogApi.Models.NotificationType.Achievement notification's metadata. Either a single grant (PrintLogApi.Models.DTOs.Notification.AchievementNotificationDto.Key and PrintLogApi.Models.DTOs.Notification.AchievementNotificationDto.Tier) or the launch summary (PrintLogApi.Models.DTOs.Notification.AchievementNotificationDto.Summary and PrintLogApi.Models.DTOs.Notification.AchievementNotificationDto.Count).
      - `key` string, nullable
      - `tier` integer, nullable
      - `summary` boolean
      - `count` integer, nullable

## Other responses

- `401`: Returned if the user is not authenticated.
- `403`: Forbidden

---

[API](https://skmtc.dev/3dprintlog/apis/3d-print-log-api.md) · [All operations](https://skmtc.dev/3dprintlog/apis/3d-print-log-api/llms.txt) · [OpenAPI document](https://skmtc.dev/3dprintlog/apis/3d-print-log-api/revisions/dfc3a4df4e38?raw)
