POST /notifiers
Changed onCreates a notifier. Set exactly one channel under properties, such as slack, email, or webhook. Returns 400 if the channel type isn't enabled for your organization. labelIds replaces assignments when supplied; [] clears them. Omitted or null labelIds preserves assignments on updates and creates an unlabeled resource on creation. IDs must belong to existing labels in your organization and are validated before saving.
Request
- Base URLhttps://api.axiom.co/v2
- AuthOAuth 2Authorization codehttps://accounts.google.com/o/oauth2/v2/authToken URLhttps://www.googleapis.com/oauth2/v4/tokenScopesnotifiers|create
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Request body
Example request
{
"createdAt": "2024-01-15T10:30:00Z",
"createdBy": "alice@example.com",
"disabledUntil": "2024-03-20T15:00:00Z",
"name": "Production Slack Alerts",
"properties": {
"chatgptWorkspaceAgent": {
"triggerId": "agtch_example"
},
"claudeCode": {
"routineId": "trig_01ABCDEFGHJKLMNOPQRSTUVW"
},
"cursor": {
"webhookUrl": "https://api2.cursor.sh/automations/webhook/00000000-0000-0000-0000-000000000000"
},
"customWebhook": {
"body": "{\"alert\": \"{{.AlertName}}\", \"severity\": \"{{.Severity}}\", \"message\": \"{{.Message}}\"}",
"headers": {
"Content-Type": "application/json",
"X-API-Version": "1.0"
},
"secretHeaders": {
"Authorization": "Bearer {{token}}"
},
"url": "https://api.custom-service.com/alerts"
},
"discord": {
"discordChannel": "123456789012345678",
"discordToken": "Bot 123456789012345678",
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
}
},
"discordWebhook": {
"discordWebhookUrl": "https://discord.com/api/webhooks/123456789012345678/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
}
},
"email": {
"emails": [
"oncall@example.com",
"alerts@example.com"
],
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
}
},
"jiraServiceManagement": {
"apiKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"microsoftTeams": {
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
},
"microsoftTeamsUrl": "https://outlook.office.com/webhook/123456789/IncomingWebhook/..."
},
"opsgenie": {
"apiKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"isEU": true
},
"pagerduty": {
"routingKey": "1234567890abcdef1234567890abcdef",
"token": "u+1234567890abcdef1234567890abcdef"
},
"slack": {
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
},
"slackUrl": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
},
"webhook": {
"url": "https://api.example.com/webhooks/alerts"
}
},
"updatedAt": "2024-01-15T11:00:00Z"
}Response
Created notifier.
Example response
{
"createdAt": "2024-01-15T10:30:00Z",
"createdBy": "alice@example.com",
"disabledUntil": "2024-03-20T15:00:00Z",
"name": "Production Slack Alerts",
"properties": {
"chatgptWorkspaceAgent": {
"triggerId": "agtch_example"
},
"claudeCode": {
"routineId": "trig_01ABCDEFGHJKLMNOPQRSTUVW"
},
"cursor": {
"webhookUrl": "https://api2.cursor.sh/automations/webhook/00000000-0000-0000-0000-000000000000"
},
"customWebhook": {
"body": "{\"alert\": \"{{.AlertName}}\", \"severity\": \"{{.Severity}}\", \"message\": \"{{.Message}}\"}",
"headers": {
"Content-Type": "application/json",
"X-API-Version": "1.0"
},
"secretHeaders": {
"Authorization": "Bearer {{token}}"
},
"url": "https://api.custom-service.com/alerts"
},
"discord": {
"discordChannel": "123456789012345678",
"discordToken": "Bot 123456789012345678",
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
}
},
"discordWebhook": {
"discordWebhookUrl": "https://discord.com/api/webhooks/123456789012345678/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
}
},
"email": {
"emails": [
"oncall@example.com",
"alerts@example.com"
],
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
}
},
"jiraServiceManagement": {
"apiKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"microsoftTeams": {
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
},
"microsoftTeamsUrl": "https://outlook.office.com/webhook/123456789/IncomingWebhook/..."
},
"opsgenie": {
"apiKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"isEU": true
},
"pagerduty": {
"routingKey": "1234567890abcdef1234567890abcdef",
"token": "u+1234567890abcdef1234567890abcdef"
},
"slack": {
"messageTemplate": {
"body": "Value {{.Value}} crossed {{.Threshold}}.{{range .Groups}}\n{{index .Values \"service\"}}: {{.Value}}{{end}}",
"title": "{{if eq .Action \"Open\"}}🔥{{else}}✅{{end}} {{.Name}}"
},
"slackUrl": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
},
"webhook": {
"url": "https://api.example.com/webhooks/alerts"
}
},
"updatedAt": "2024-01-15T11:00:00Z",
"id": "z0NfJw64aKagPOBBIJ"
}Changes
- breaking
added
subschema #2to the request bodyallOflist - breaking
the request's body type changed from
objectto no type - warning
removed the request property
- warning
removed the request property
- warning
removed the request property
- info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
/////to the response with the status - info
added the optional property
/////to the response with the status - info
added the optional property
//////to the response with the status - info
added the optional property
//////to the response with the status - info
added the optional property
//////to the response with the status - info
added the optional property
/////to the response with the status - info
added the optional property
//////to the response with the status - info
added the optional property
//////to the response with the status - info
added the required property
/to the response with the status
- breaking
- info
added the non-success response with the status
- info