---
title: "createNotification"
method: POST
path: "/v1/notification/notifications"
tags: ["Notification"]
---

# createNotification

`POST /v1/notification/notifications`

Create a message that can be displayed in the notification panel.

## Request body

- Notification
  - `notification_id` number
  - `timestamp` string, date-time
  - `type` string, required — Type of notification
  - `redirect_url` string — Redirect url
  - `organization_id` string — Organization Id
  - `title` object, required
    - `en` string — Title for notification. Supports handlebars syntax.
    - `de` string — Title for notification. Supports handlebars syntax.
  - `message` object, required
    - `en` string — Message for notification. Supports handlebars syntax.
    - `de` string — Message for notification. Supports handlebars syntax.
  - `payload` object
  - `caller` NotificationCallerContext
    - `EpilotAuth` object
      - `token` object
        - `sub` string
        - `email` string
        - `cognito:username` string
        - `custom:ivy_user_id` string
  - `operations` EntityOperation[]
    - `entity` string, uuid, required
    - `operation` string
    - `params` object
      - `id` string, uuid
      - `slug` string — URL-friendly identifier for the entity schema
    - `payload` object
  - `force_notify_users` object
  - `allowed_channels` string[] — Optional delivery-channel ceiling. When present, delivery is restricted to the intersection of this set and each recipient's own notification preferences — it can only NARROW delivery, never force a channel on. Absent means no restriction (recipient preferences and per-type defaults apply as before). An empty array suppresses all channels.
  - `read_state` boolean
  - `visibility_user_ids` string[] — The person who is the corresponding event recipient.
  - `skip_user_resolution` boolean — When true, the notification is written directly for each id in `visibility_user_ids` without resolving them against the user API (an in-app notification only; email is skipped). Only honored for trusted service callers whose token carries no user identity of its own — used to target end-customer portal users (`USER#{portal_user_id}`). A real end-user token may not set it.
  - `template_id` string, uuid — Render this specific `notification_template` entity (by id) instead of looking one up by `type`. Used by portal notification triggers, which let the builder pick an exact template.

## Response `202`

Success

## Changes

- **2026-08-27** `0f041a715e69` — 2 info
  - added the new optional request property `allOf[subschema #2]/skip_user_resolution`
  - added the new optional request property `allOf[subschema #2]/template_id`
- **2026-07-21** `38fa1829759b` — 1 info
  - added the new optional request property `allOf[#/components/schemas/NotificationBase]/allowed_channels`

[Change history](https://skmtc.dev/epilot/apis/notification-api/changes/v1/notification/notifications/post.md)

---

[API](https://skmtc.dev/epilot/apis/notification-api.md) · [All operations](https://skmtc.dev/epilot/apis/notification-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/epilot/notification-api/revisions/0f041a715e69/schema)
