Create Amazon SNS integration

Returns either a newly created Amazon SNS integration, or validation errors. Subscribe a topic to the returned url to start receiving notifications, as described in the Amazon SNS integration guide. Leave Enable raw message delivery off on that subscription, or every notification is rejected with 400.

POST https://incidents.betterstack.com/api/v2/amazon-sns

Headers

Authorization
required string
Content-Type
string

Body parameters

team_name
string
name
string
policy_id
string
call
boolean
sms
boolean
email
boolean
push
boolean
critical_alert
boolean
team_wait
integer
recovery_period
integer
paused
boolean
started_rule_type
string
acknowledged_rule_type
string
resolved_rule_type
string
started_rules
array
started_rules[].rule_target
required string
started_rules[].target_field
string
started_rules[].match_type
required string
started_rules[].content
required string
acknowledged_rules
array
resolved_rules
array
cause_field
object
cause_field.field_target
required string
cause_field.target_field
string
cause_field.match_type
required string
cause_field.content
string
cause_field.content_before
string
cause_field.content_after
string
title_field
object
started_alert_id_field
object
acknowledged_alert_id_field
object
resolved_alert_id_field
object
other_started_fields
array
other_started_fields[].name
required string
other_acknowledged_fields
array
other_resolved_fields
array
201

Response body

{
  "data": {
    "id": "5",
    "type": "amazon_sns_integration",
    "attributes": {
      "name": "Backend alerts",
      "created_at": "2026-09-09T10:06:12.418Z",
      "updated_at": "2026-09-09T10:06:12.418Z",
      "policy_id": null,
      "url": "https://incidents.betterstack.com/api/v1/incoming-webhook/[token]",
      "sample_query_string": null,
      "sample_headers": null,
      "sample_body": null,
      "team_name": "Testing",
      "call": false,
      "sms": false,
      "email": true,
      "push": true,
      "critical_alert": false,
      "team_wait": 180,
      "recovery_period": 0,
      "paused": false,
      "started_rule_type": "unused",
      "acknowledged_rule_type": "unused",
      "resolved_rule_type": "unused",
      "started_rules": [],
      "acknowledged_rules": [],
      "resolved_rules": [],
      "cause_field": {
        "name": null,
        "special_type": "cause",
        "field_target": "body",
        "match_type": "match_everything",
        "target_field": null,
        "content": null,
        "content_before": null,
        "content_after": null
      },
      "title_field": {
        "name": null,
        "special_type": "title",
        "field_target": "sns_envelope",
        "match_type": "match_everything",
        "target_field": "Subject",
        "content": null,
        "content_before": null,
        "content_after": null
      },
      "started_alert_id_field": {
        "name": null,
        "special_type": "alert_id",
        "field_target": "body",
        "match_type": "match_everything",
        "target_field": null,
        "content": null,
        "content_before": null,
        "content_after": null
      },
      "acknowledged_alert_id_field": null,
      "resolved_alert_id_field": null,
      "other_started_fields": null,
      "other_acknowledged_fields": null,
      "other_resolved_fields": null,
      "topic_arn": null,
      "subscription_state": "awaiting"
    }
  }
}

Example cURL

Example
curl -X "POST" "https://incidents.betterstack.com/api/v2/amazon-sns/" \
     -H "Authorization: Bearer $TOKEN" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d $'{
  "name": "Backend alerts"
}'


What does a new integration extract by default?

The incident title comes from the notification's Subject, and the cause and alert ID from the message, so a test publish raises a useful incident straight away. Send cause_field, title_field, or started_alert_id_field to replace them, or title_field: null to drop the title extraction.

Why can't I set topic_arn?

Better Stack writes topic_arn and subscription_state itself once AWS confirms the subscription, so both are read-only. Sending either one returns 422, as does any other attribute the endpoint does not recognize.