> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.labric.co/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.labric.co/_mcp/server.

# Send a notification

POST https://platform.labric.co/api/v1/notifications
Content-Type: application/json

Send a message to your own inbox, and to your email if you have enabled
email for the Message category in your notification preferences. Sends are
capped per hour and per organization per day; a 429 response carries a
Retry-After header. Messages sent with an API key are attributed to it, so
the recipient can tell where they came from.

Requires an API key with the `write` scope.

Reference: https://docs.labric.co/api-reference/labric-api/notifications/send

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects an object.

- `title` (string, required)
- `dedupe_key` (string, required) — Idempotency key; a repeat send with the same key is dropped
- `body` (string, optional, default: )
- `action_url` (string, optional, default: ) — Platform path the notification opens, such as /jobs/\<id>
- `data` (map from string to any, optional, nullable) — Structured context stored with the notification. The keys sender and api_key_id are reserved for sender attribution.

## Response

### 200

OK

- `status` (enum, required)
  - Allowed values: `delivered`, `deduplicated`, `muted`
- `id` (string, optional, nullable) — Inbox row id; null when the send was deduplicated or muted

## Errors

### 400 Bad Request Error

Bad Request

- `detail` (string, required)

### 401 Unauthorized Error

Unauthorized

- `detail` (string, required)

### 403 Forbidden Error

Forbidden

- `detail` (string, required)

### 404 Not Found Error

Not Found

- `detail` (string, required)

### 422 Unprocessable Entity Error

Unprocessable Content

- `detail` (list of map from string to any, required)

### 429 Too Many Requests Error

Too Many Requests

- `detail` (string, required)

### 500 Internal Server Error

Internal Server Error

- `detail` (string, required)

## Examples

**Request**

```json
{
  "title": "Tensile batch 42 finished",
  "dedupe_key": "tensile-batch-42:finished",
  "body": "96 of 96 specimens analyzed; 3 flagged for review",
  "action_url": "/jobs/8f1c2d3e-4b5a-4c6d-9e7f-0a1b2c3d4e5f",
  "data": {
    "batch": 42,
    "flagged": 3
  }
}
```

**Response**

```json
{
  "status": "delivered",
  "id": "2b7e1c4d-9f3a-4e8b-a6c5-1d2e3f4a5b6c"
}
```

**SDK Code**

```python
from labric import Labric

client = Labric(
    api_key="YOUR_TOKEN_HERE",
)

client.notifications.send(
    title="Tensile batch 42 finished",
    body="96 of 96 specimens analyzed; 3 flagged for review",
    action_url="/jobs/8f1c2d3e-4b5a-4c6d-9e7f-0a1b2c3d4e5f",
    dedupe_key="tensile-batch-42:finished",
    data={
        "batch": 42,
        "flagged": 3
    },
)

```