# Alerts and notifications Alert channels, alert rules and notification settings. Read only: changing who gets alerted stays in the app. **Common tasks** - [List alert channels](#get-organizations-organization-alert-channels) **Only in the app:** Adding or changing alert channels and who gets alerted. **How it works in the app:** [help article](https://infranest.io/docs/alerts). **Scopes:** Read with `monitoring.read`. See [Tokens and scopes](../tokens-and-scopes.md#scopes).
[Alert channels](#alert-channels) 2
Every endpoint below takes a token in the `Authorization: Bearer` header and answers JSON. Errors use the shared format in [Errors](../errors.md). Base address: `https://api.infranest.io/api`. ## Alert channels ### List alert destinations {#get-organizations-organization-alert-channels}
`GET` `/organizations/{organization}/alert-channels` **Scope:** `monitoring.read` · **Changes data:** no Every place the organization sends alerts, such as email, Slack or Telegram, with how many checks use each and how many alerts it missed while it refused messages. Pass `personal=1` for only your own personal destinations. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/alert-channels" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json [ { "id": 1, "organization_id": 1, "name": "Ops team — email", "type": "email", "settings": { "email": "ops@northwind.example" }, "enabled": true, "deleted_at": null, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "subscriptions": [ "monitoring_down", "monitoring_recovered" ], "is_personal": false, "user_id": null, "format": "html", "last_sent_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null, "consecutive_failures": 0, "last_failure_at": null, "last_error": null, "last_error_type": null, "broken_since": null, "broken_notified_at": null, "broken_notify_count": 0, "awaiting_confirmation_at": null, "categories": null, "telegram_link_id": null, "telegram_chat_id": null, "slack_installation_id": null, "slack_channel_id": null, "checks_count": 0, "missed_alerts_count": 0, "missed_alerts_min_created_at": null, "needs_telegram_link": false }, { "id": 2, "organization_id": 1, "name": "On-call — critical only", "type": "email", "settings": { "email": "oncall@northwind.example", "critical_only": true }, "enabled": true, "deleted_at": null, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "subscriptions": [ "monitoring_down", "domain_expiry_critical" ], "is_personal": false, "user_id": null, "format": "html", "last_sent_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null, "consecutive_failures": 0, "last_failure_at": null, "last_error": null, "last_error_type": null, "broken_since": null, "broken_notified_at": null, "broken_notify_count": 0, "awaiting_confirmation_at": null, "categories": null, "telegram_link_id": null, "telegram_chat_id": null, "slack_installation_id": null, "slack_channel_id": null, "checks_count": 0, "missed_alerts_count": 0, "missed_alerts_min_created_at": null, "needs_telegram_link": false } ] ```
--- ### Get an alert destination {#get-organizations-organization-alert-channels-alertchannel}
`GET` `/organizations/{organization}/alert-channels/{alertChannel}` **Scope:** `monitoring.read` · **Changes data:** no One alert destination with the checks that send to it. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | | `alertChannel_id`
path · required | integer | The alertChannel's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/alert-channels/1" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "id": 1, "organization_id": 1, "name": "Ops team — email", "type": "email", "settings": { "email": "ops@northwind.example" }, "enabled": true, "deleted_at": null, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "subscriptions": [ "monitoring_down", "monitoring_recovered" ], "is_personal": false, "user_id": null, "format": "html", "last_sent_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null, "consecutive_failures": 0, "last_failure_at": null, "last_error": null, "last_error_type": null, "broken_since": null, "broken_notified_at": null, "broken_notify_count": 0, "awaiting_confirmation_at": null, "categories": null, "telegram_link_id": null, "telegram_chat_id": null, "slack_installation_id": null, "slack_channel_id": null, "checks_count": 0, "checks": [] } ```