---
title: "Create or update a standing calendar alert rule"
method: POST
path: "/rest/api/v1/projects/{projectId}/calendarAlertRules"
tags: ["News API"]
---

# Create or update a standing calendar alert rule

`POST /rest/api/v1/projects/{projectId}/calendarAlertRules`

A rule such as "notify me 30 minutes before every HIGH impact USD event". The 30 minute calendar sync turns it into ordinary alerts, so a change takes effect on the next sync and any alert the previous version had already materialised is dropped.

## Path parameters

- `projectId` string, uuid, required

## Request body

- CalendarAlertRuleDTO — Standing calendar alert rule of a project
  - `createdAt` string, date-time — Creation time
  - `createdByEmail` string — Who created the rule, provenance only and never a scope
  - `currencyCodes` string[] — Currencies the rule reacts to. Empty matches every currency.
  - `enabled` boolean — A disabled rule stops materialising new alerts
  - `id` string — MongoDB document id
  - `includeMarketNews` boolean — Also send HIGH impact market news headlines matching the currencies of this rule. Those have no lead time, they are announced when they are summarised.
  - `leadMinutes` integer[] — Minutes before the event the alerts fire
  - `minImpact` 'HOLIDAY' | 'LOW' | 'MEDIUM' | 'HIGH' — Lowest impact the rule reacts to
  - `name` string — Label shown in the alerts panel
  - `notificationTargets` NotificationTargetDTO[] — Where the alerts are delivered
    - `featureId` string, uuid — Id of the channel feature instance, for example the project's Telegram feature
    - `recipient` string — Null means every recipient of that channel. Telegram: the username. Email: the address. Slack, Discord, Teams and webhook always leave this null.
  - `projectId` string, uuid — Owning project

## Response `200`

OK

- CalendarAlertRuleDTO — Standing calendar alert rule of a project
  - `createdAt` string, date-time — Creation time
  - `createdByEmail` string — Who created the rule, provenance only and never a scope
  - `currencyCodes` string[] — Currencies the rule reacts to. Empty matches every currency.
  - `enabled` boolean — A disabled rule stops materialising new alerts
  - `id` string — MongoDB document id
  - `includeMarketNews` boolean — Also send HIGH impact market news headlines matching the currencies of this rule. Those have no lead time, they are announced when they are summarised.
  - `leadMinutes` integer[] — Minutes before the event the alerts fire
  - `minImpact` 'HOLIDAY' | 'LOW' | 'MEDIUM' | 'HIGH' — Lowest impact the rule reacts to
  - `name` string — Label shown in the alerts panel
  - `notificationTargets` NotificationTargetDTO[] — Where the alerts are delivered
    - `featureId` string, uuid — Id of the channel feature instance, for example the project's Telegram feature
    - `recipient` string — Null means every recipient of that channel. Telegram: the username. Email: the address. Slack, Discord, Teams and webhook always leave this null.
  - `projectId` string, uuid — Owning project

## Changes

- **2026-08-30** `69d2d39c695e` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/metacopier/apis/metacopier-api/changes/rest/api/v1/projects/:projectId/calendarAlertRules/post.md)

---

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