---
title: "Send Messages"
method: POST
path: "/api/notifications/"
tags: ["notifications"]
---

# Send Messages

`POST /api/notifications/`

Send E2E encrypted messages to one or more users.

Each message is encrypted with the recipient's individual shared key.
Creates bilateral notifications visible to both sender and recipient.
If recipient is online via WebSocket, delivers in real-time.

Returns the created notifications.

## Request body

- SendMessageRequestInput — Send E2E encrypted messages to one or more users. Each recipient gets the same logical message, encrypted with their individual shared key (derived from X25519 DH).
  - `messages` MessageRecipient[], required
    - `recipient_ext_id` string, required
    - `content` string, required

## Response `201`

Successful Response

- NotificationResponse[]
  - `type` 'user_message' | 'workspaceuser_added_owner' | 'workspaceuser_added_collaborator' | 'workspaceuser_added_guest' | 'workspaceuser_removed' | 'workspaceuser_updated_owner' | 'workspaceuser_updated_collaborator' | 'workspaceuser_updated_guest' | 'contact_accepted', required — Notification types - all persisted AND delivered via WebSocket. Type is self-descriptive, no need to parse content field.
  - `external_id` string, required
  - `sender` UserResponse, required — Standard user representation used across all endpoints. Used for: login response, workspace users, contacts (when registered).
    - `external_id` string, required
    - `email` string, required
    - `given_name` string, required
    - `family_name` string, required
    - `picture` string, nullable
    - `encryption_public_key` string, required
  - `recipient` UserResponse, required — Standard user representation used across all endpoints. Used for: login response, workspace users, contacts (when registered).
    - `external_id` string, required
    - `email` string, required
    - `given_name` string, required
    - `family_name` string, required
    - `picture` string, nullable
    - `encryption_public_key` string, required
  - `workspace_ext_id` string, nullable
  - `content` string, nullable
  - `new` boolean
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422` — Validation Error

## Changes

- **2026-01-17** `b91e4b449d56` — 9 warning
  - added the new `contact_accepted` enum value to the `items/type` response property for the response status `201`
  - added the new `user_message` enum value to the `items/type` response property for the response status `201`
  - added the new `workspaceuser_added_collaborator` enum value to the `items/type` response property for the response status `201`
  - added the new `workspaceuser_added_guest` enum value to the `items/type` response property for the response status `201`
  - …5 more
- **2025-12-31** `d14bca97ba86` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/arbicity/apis/arbi/changes/api/notifications/post.md)

---

[API](https://skmtc.dev/arbicity/apis/arbi.md) · [All operations](https://skmtc.dev/arbicity/apis/arbi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/arbicity/arbi/revisions/2869dee5e8ca/schema)
