LaserData Notification Channels API
Notification channels (email, slack, webhook)
Notification channels (email, slack, webhook)
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/laserdata-notification-channels-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: LaserData Cloud Audit Account Notification Channels API
description: 'Tenant audit log and per-user activity feed.
Public REST API for the LaserData Cloud audit service.
## Authentication
Every endpoint accepts either of two auth methods:
- **API key** (machine / CI / SDK): send in the `ld-api-key` header. Cannot be used on `GET /audit/users/activity` which is session-only.
- **Session cookie** (browser / console): obtained from `POST /account/sign_in` on the control plane.
Audit endpoints are read-only and replay-safe by definition.
## Pagination
List endpoints return a `Paged<T>` body (`page`, `total_pages`, `total_results`, `items`) and a `link` header (RFC 8288) with `rel="first"`, `"prev"`, `"next"`, `"last"` when applicable.
## Errors
Error responses follow RFC 7807 `application/problem+json` with `type`, `title`, `code`, `reason`, `instance`, `status`, `retryable`, and optional `field` / `field_issues`. `retryable` is `true` for 408, 425, 429, 500, 502, 503, 504.
## Response headers
- `ld-request`: request ID. Include it when reporting issues.
- `link`: pagination relations.
- `retry-after`: wait hint on 429 / 503.'
termsOfService: https://laserdata.com/terms
contact:
name: LaserData Support
url: https://docs.laserdata.com
email: support@laserdata.com
license:
name: Proprietary
version: 0.0.66
x-logo:
url: https://assets.laserdata.com/laserdata_dark.png
altText: LaserData
href: https://laserdata.com
servers:
- url: https://api.laserdata.cloud
description: Production
security:
- ld_api_key: []
- session_cookie: []
tags:
- name: Notification Channels
description: Notification channels (email, slack, webhook)
paths:
/tenants/{tenant_id}/channels:
get:
tags:
- Notification Channels
summary: List tenant notification channels
description: Returns paged tenant-owned channels. Supports filtering by channel kind.
operationId: get_tenant_channels
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: page
in: query
required: false
schema:
type:
- integer
- 'null'
format: int64
minimum: 1
example: 1
- name: results
in: query
required: false
schema:
type:
- integer
- 'null'
format: int64
minimum: 1
example: 10
- name: channel
in: query
required: false
schema:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/NotificationChannelKind'
responses:
'200':
description: Paged channels
content:
application/json:
schema:
$ref: '#/components/schemas/Paged_NotificationChannelInfo'
'403':
description: Insufficient permissions
post:
tags:
- Notification Channels
summary: Create tenant notification channel
description: Creates a tenant-owned notification channel such as Slack, webhook, email, or SMS. Destination validation depends on the chosen channel kind.
operationId: create_tenant_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
requestBody:
description: Channel type, destination, name, optional settings and remarks
content:
application/json:
schema:
$ref: '#/components/schemas/CreateChannel'
required: true
responses:
'201':
description: Channel created
'400':
description: Invalid channel configuration
'403':
description: Insufficient permissions
'409':
description: Channel already exists or limit reached
/tenants/{tenant_id}/channels/{channel_id}:
get:
tags:
- Notification Channels
summary: Get tenant notification channel
description: Returns configuration and metadata for one tenant-owned notification channel.
operationId: get_tenant_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
responses:
'200':
description: Channel details
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationChannelDetails'
'403':
description: Insufficient permissions
'404':
description: Channel not found
put:
tags:
- Notification Channels
summary: Update tenant notification channel
description: Partially updates a tenant-owned notification channel. Omitted fields are left unchanged.
operationId: update_tenant_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
requestBody:
description: Partial channel update
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateChannel'
required: true
responses:
'204':
description: Channel updated
'400':
description: Invalid channel configuration
'403':
description: Insufficient permissions
'404':
description: Channel not found
delete:
tags:
- Notification Channels
summary: Delete tenant notification channel
description: Deletes a tenant-owned notification channel and all subscriptions attached to it.
operationId: delete_tenant_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
responses:
'204':
description: Channel deleted
'403':
description: Insufficient permissions
'404':
description: Channel not found
/tenants/{tenant_id}/channels/{channel_id}/test:
post:
tags:
- Notification Channels
summary: Send test tenant notification
description: Sends a test message through a tenant-owned notification channel. Rate limited to prevent abuse.
operationId: test_tenant_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
responses:
'204':
description: Test notification sent
'400':
description: Channel disabled or cannot send to private address
'403':
description: Insufficient permissions
'404':
description: Channel not found
'429':
description: Test channel rate limited
/tenants/{tenant_id}/divisions/{division_id}/channels:
get:
tags:
- Notification Channels
summary: List division notification channels
description: Returns paged division-owned channels. Supports filtering by channel kind.
operationId: get_division_channels
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: division_id
in: path
description: Division identifier
required: true
schema:
$ref: '#/components/schemas/DivisionId'
- name: page
in: query
required: false
schema:
type:
- integer
- 'null'
format: int64
minimum: 1
example: 1
- name: results
in: query
required: false
schema:
type:
- integer
- 'null'
format: int64
minimum: 1
example: 10
- name: channel
in: query
required: false
schema:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/NotificationChannelKind'
responses:
'200':
description: Paged channels
content:
application/json:
schema:
$ref: '#/components/schemas/Paged_NotificationChannelInfo'
'403':
description: Insufficient permissions
post:
tags:
- Notification Channels
summary: Create division notification channel
description: Creates a division-owned notification channel using the same payload contract as tenant channels.
operationId: create_division_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: division_id
in: path
description: Division identifier
required: true
schema:
$ref: '#/components/schemas/DivisionId'
requestBody:
description: Channel type, destination, name, optional settings and remarks
content:
application/json:
schema:
$ref: '#/components/schemas/CreateChannel'
required: true
responses:
'201':
description: Channel created
'400':
description: Invalid channel configuration
'403':
description: Insufficient permissions
'409':
description: Channel already exists or limit reached
/tenants/{tenant_id}/divisions/{division_id}/channels/{channel_id}:
get:
tags:
- Notification Channels
summary: Get division notification channel
description: Returns configuration and metadata for one division-owned notification channel.
operationId: get_division_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: division_id
in: path
description: Division identifier
required: true
schema:
$ref: '#/components/schemas/DivisionId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
responses:
'200':
description: Channel details
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationChannelDetails'
'403':
description: Insufficient permissions
'404':
description: Channel not found
put:
tags:
- Notification Channels
summary: Update division notification channel
description: Partially updates a division-owned notification channel. Omitted fields are left unchanged.
operationId: update_division_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: division_id
in: path
description: Division identifier
required: true
schema:
$ref: '#/components/schemas/DivisionId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
requestBody:
description: Partial channel update
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateChannel'
required: true
responses:
'204':
description: Channel updated
'400':
description: Invalid channel configuration
'403':
description: Insufficient permissions
'404':
description: Channel not found
delete:
tags:
- Notification Channels
summary: Delete division notification channel
description: Deletes a division-owned notification channel and all subscriptions attached to it.
operationId: delete_division_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: division_id
in: path
description: Division identifier
required: true
schema:
$ref: '#/components/schemas/DivisionId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
responses:
'204':
description: Channel deleted
'403':
description: Insufficient permissions
'404':
description: Channel not found
/tenants/{tenant_id}/divisions/{division_id}/channels/{channel_id}/test:
post:
tags:
- Notification Channels
summary: Send test division notification
description: Sends a test message through a division-owned notification channel. Rate limited to prevent abuse.
operationId: test_division_channel
parameters:
- name: tenant_id
in: path
description: Tenant identifier
required: true
schema:
$ref: '#/components/schemas/TenantId'
- name: division_id
in: path
description: Division identifier
required: true
schema:
$ref: '#/components/schemas/DivisionId'
- name: channel_id
in: path
description: Channel identifier
required: true
schema:
$ref: '#/components/schemas/NotificationChannelId'
responses:
'204':
description: Test notification sent
'400':
description: Channel disabled or cannot send to private address
'403':
description: Insufficient permissions
'404':
description: Channel not found
'429':
description: Test channel rate limited
components:
schemas:
Paged_NotificationChannelInfo:
type: object
required:
- total_pages
- total_results
- page
- items
properties:
items:
type: array
items:
type: object
required:
- id
- owner_kind
- owner_id
- channel
- name
- enabled
- created_at
- updated_at
properties:
channel:
$ref: '#/components/schemas/NotificationChannelKind'
created_at:
type: string
format: date-time
enabled:
type: boolean
id:
$ref: '#/components/schemas/NotificationChannelId'
name:
$ref: '#/components/schemas/NotificationChannelName'
owner_id:
type: integer
format: int64
example: 7261845022003200001
minimum: 0
owner_kind:
$ref: '#/components/schemas/OwnerKind'
updated_at:
type: string
format: date-time
example:
id: 7261845330120500000
owner_kind: tenant
owner_id: 7261845022003200001
channel: email
name: ops-team-email
enabled: true
created_at: '2026-05-20T10:00:00Z'
updated_at: '2026-05-20T10:00:00Z'
page:
type: integer
format: int64
example: 1
minimum: 1
total_pages:
type: integer
format: int64
example: 4
minimum: 0
total_results:
type: integer
format: int64
example: 137
minimum: 0
NotificationChannelName:
type: string
example: ops-webhook
WebhookSettings:
type: object
properties:
headers:
type:
- object
- 'null'
additionalProperties:
type: string
propertyNames:
type: string
method:
type:
- string
- 'null'
example: POST
example:
headers:
Authorization: Bearer secret-token
method: POST
NotificationChannelInfo:
type: object
required:
- id
- owner_kind
- owner_id
- channel
- name
- enabled
- created_at
- updated_at
properties:
channel:
$ref: '#/components/schemas/NotificationChannelKind'
created_at:
type: string
format: date-time
enabled:
type: boolean
id:
$ref: '#/components/schemas/NotificationChannelId'
name:
$ref: '#/components/schemas/NotificationChannelName'
owner_id:
type: integer
format: int64
example: 7261845022003200001
minimum: 0
owner_kind:
$ref: '#/components/schemas/OwnerKind'
updated_at:
type: string
format: date-time
example:
id: 7261845330120500000
owner_kind: tenant
owner_id: 7261845022003200001
channel: email
name: ops-team-email
enabled: true
created_at: '2026-05-20T10:00:00Z'
updated_at: '2026-05-20T10:00:00Z'
SlackSettings:
type: object
properties:
channel:
type:
- string
- 'null'
example: laser-alerts
icon_emoji:
type:
- string
- 'null'
example: ':rotating_light:'
username:
type:
- string
- 'null'
example: LaserData Cloud
OwnerKind:
type: string
enum:
- user
- tenant
- division
- system
NotificationChannelDetails:
allOf:
- $ref: '#/components/schemas/NotificationChannelInfo'
- type: object
required:
- destination
properties:
destination:
$ref: '#/components/schemas/NotificationChannelDestination'
remarks:
type:
- string
- 'null'
settings:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/ChannelSettings'
DivisionId:
type: integer
format: int64
example: 7261844974723780000
minimum: 0
UpdateChannel:
type: object
properties:
destination:
type:
- string
- 'null'
example: https://hooks.example.com/laserdata/ops-v2
enabled:
type:
- boolean
- 'null'
name:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/NotificationChannelName'
remarks:
type:
- string
- 'null'
example: Migrated to rotated webhook URL
settings:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/ChannelSettings'
CreateChannel:
type: object
required:
- channel
- name
- destination
properties:
channel:
$ref: '#/components/schemas/NotificationChannelKind'
destination:
type: string
example: https://hooks.example.com/laserdata/ops
name:
$ref: '#/components/schemas/NotificationChannelName'
remarks:
type:
- string
- 'null'
example: Primary production incident sink
settings:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/ChannelSettings'
NotificationChannelKind:
type: string
enum:
- slack
- webhook
- sms
- email
NotificationChannelDestination:
type: string
example: https://hooks.slack.com/services/REDACTED
ChannelSettings:
type: object
properties:
slack:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/SlackSettings'
sms:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/SmsSettings'
webhook:
oneOf:
- type: 'null'
- $ref: '#/components/schemas/WebhookSettings'
NotificationChannelId:
type: integer
format: int64
example: 7261845612345670000
minimum: 0
TenantId:
type: integer
format: int64
example: 7261845022003200001
minimum: 0
SmsSettings:
type: object
properties:
sender_id:
type:
- string
- 'null'
example: LaserData
securitySchemes:
ld_api_key:
type: apiKey
in: header
name: ld-api-key
description: Tenant API key sent in the ld-api-key request header. Scoped to tenant-level audit reads. Cannot be used on user-scope endpoints (`/audit/users/activity`).
session_cookie:
type: apiKey
in: cookie
name: session
description: Browser session cookie issued by POST /account/sign_in on core. Required for user-scope endpoints.
externalDocs:
url: https://docs.laserdata.com
description: LaserData Cloud documentation