Create
Share an update against an incident.
An update can carry a message, move the incident to a new status, change its severity, or any combination of the three. At least one of them must be provided.
Which permissions you need depends on what the update does: changing status requires permission to update an incident’s status, and changing severity permission to update its severity.
curl --request POST \
--url https://api.incident.io/v2/incident_updates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"idempotency_key": "alert-uuid",
"incident_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"message": "We're working on a fix, hoping to ship in the next 30 minutes",
"to_incident_status_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"to_severity_id": "01FH5TZRWMNAFB0DZ23FD1TV96"
}
EOFimport requests
url = "https://api.incident.io/v2/incident_updates"
payload = {
"idempotency_key": "alert-uuid",
"incident_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"message": "We're working on a fix, hoping to ship in the next 30 minutes",
"to_incident_status_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"to_severity_id": "01FH5TZRWMNAFB0DZ23FD1TV96"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idempotency_key: 'alert-uuid',
incident_id: '01G0J1EXE7AXZ2C93K61WBPYEH',
message: 'We\'re working on a fix, hoping to ship in the next 30 minutes',
to_incident_status_id: '01G0J1EXE7AXZ2C93K61WBPYEH',
to_severity_id: '01FH5TZRWMNAFB0DZ23FD1TV96'
})
};
fetch('https://api.incident.io/v2/incident_updates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.incident.io/v2/incident_updates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'idempotency_key' => 'alert-uuid',
'incident_id' => '01G0J1EXE7AXZ2C93K61WBPYEH',
'message' => 'We\'re working on a fix, hoping to ship in the next 30 minutes',
'to_incident_status_id' => '01G0J1EXE7AXZ2C93K61WBPYEH',
'to_severity_id' => '01FH5TZRWMNAFB0DZ23FD1TV96'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.incident.io/v2/incident_updates"
payload := strings.NewReader("{\n \"idempotency_key\": \"alert-uuid\",\n \"incident_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"message\": \"We're working on a fix, hoping to ship in the next 30 minutes\",\n \"to_incident_status_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"to_severity_id\": \"01FH5TZRWMNAFB0DZ23FD1TV96\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.incident.io/v2/incident_updates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"alert-uuid\",\n \"incident_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"message\": \"We're working on a fix, hoping to ship in the next 30 minutes\",\n \"to_incident_status_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"to_severity_id\": \"01FH5TZRWMNAFB0DZ23FD1TV96\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.incident.io/v2/incident_updates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotency_key\": \"alert-uuid\",\n \"incident_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"message\": \"We're working on a fix, hoping to ship in the next 30 minutes\",\n \"to_incident_status_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"to_severity_id\": \"01FH5TZRWMNAFB0DZ23FD1TV96\"\n}"
response = http.request(request)
puts response.read_body{
"incident_update": {
"created_at": "2021-08-17T13:28:57.801578Z",
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"incident_id": "01FCNDV6P870EA6S7TK1DSYDG0",
"merged_into_incident_id": "01FCNDV6P870EA6S7TK1DSYDG0",
"message": "We're working on a fix, hoping to ship in the next 30 minutes",
"new_incident_status": {
"category": "triage",
"created_at": "2021-08-17T13:28:57.801578Z",
"description": "Impact has been **fully mitigated**, and we're ready to learn from this incident.",
"id": "01FCNDV6P870EA6S7TK1DSYD5H",
"name": "Closed",
"rank": 4,
"updated_at": "2021-08-17T13:28:57.801578Z"
},
"new_severity": {
"created_at": "2021-08-17T13:28:57.801578Z",
"description": "Issues with **low impact**.",
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "Minor",
"rank": 1,
"updated_at": "2021-08-17T13:28:57.801578Z"
},
"updater": {
"alert": {
"id": "01GW2G3V0S59R238FAHPDS1R66",
"title": "*errors.withMessage: PG::Error failed to connect"
},
"api_key": {
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "My test API key"
},
"user": {
"email": "lisa@incident.io",
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "Lisa Karlin Curtis",
"role": "owner",
"slack_user_id": "U02AYNF2XJM"
},
"workflow": {
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "My little workflow"
}
}
}
}incident_updates.create scope.Authorizations
API key from your incident.io dashboard (Settings → API keys)
Body
Unique string used to de-duplicate incident update requests. Retrying with the same key returns the update the first request created, rather than sharing a second one.
"alert-uuid"
The incident you want to update
"01G0J1EXE7AXZ2C93K61WBPYEH"
Message that explains the context behind the update, in markdown
"We're working on a fix, hoping to ship in the next 30 minutes"
Move the incident to this status
"01G0J1EXE7AXZ2C93K61WBPYEH"
Move the incident to this severity
"01FH5TZRWMNAFB0DZ23FD1TV96"
Response
Created response.
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api.incident.io/v2/incident_updates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"idempotency_key": "alert-uuid",
"incident_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"message": "We're working on a fix, hoping to ship in the next 30 minutes",
"to_incident_status_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"to_severity_id": "01FH5TZRWMNAFB0DZ23FD1TV96"
}
EOFimport requests
url = "https://api.incident.io/v2/incident_updates"
payload = {
"idempotency_key": "alert-uuid",
"incident_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"message": "We're working on a fix, hoping to ship in the next 30 minutes",
"to_incident_status_id": "01G0J1EXE7AXZ2C93K61WBPYEH",
"to_severity_id": "01FH5TZRWMNAFB0DZ23FD1TV96"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idempotency_key: 'alert-uuid',
incident_id: '01G0J1EXE7AXZ2C93K61WBPYEH',
message: 'We\'re working on a fix, hoping to ship in the next 30 minutes',
to_incident_status_id: '01G0J1EXE7AXZ2C93K61WBPYEH',
to_severity_id: '01FH5TZRWMNAFB0DZ23FD1TV96'
})
};
fetch('https://api.incident.io/v2/incident_updates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.incident.io/v2/incident_updates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'idempotency_key' => 'alert-uuid',
'incident_id' => '01G0J1EXE7AXZ2C93K61WBPYEH',
'message' => 'We\'re working on a fix, hoping to ship in the next 30 minutes',
'to_incident_status_id' => '01G0J1EXE7AXZ2C93K61WBPYEH',
'to_severity_id' => '01FH5TZRWMNAFB0DZ23FD1TV96'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.incident.io/v2/incident_updates"
payload := strings.NewReader("{\n \"idempotency_key\": \"alert-uuid\",\n \"incident_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"message\": \"We're working on a fix, hoping to ship in the next 30 minutes\",\n \"to_incident_status_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"to_severity_id\": \"01FH5TZRWMNAFB0DZ23FD1TV96\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.incident.io/v2/incident_updates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"alert-uuid\",\n \"incident_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"message\": \"We're working on a fix, hoping to ship in the next 30 minutes\",\n \"to_incident_status_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"to_severity_id\": \"01FH5TZRWMNAFB0DZ23FD1TV96\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.incident.io/v2/incident_updates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotency_key\": \"alert-uuid\",\n \"incident_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"message\": \"We're working on a fix, hoping to ship in the next 30 minutes\",\n \"to_incident_status_id\": \"01G0J1EXE7AXZ2C93K61WBPYEH\",\n \"to_severity_id\": \"01FH5TZRWMNAFB0DZ23FD1TV96\"\n}"
response = http.request(request)
puts response.read_body{
"incident_update": {
"created_at": "2021-08-17T13:28:57.801578Z",
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"incident_id": "01FCNDV6P870EA6S7TK1DSYDG0",
"merged_into_incident_id": "01FCNDV6P870EA6S7TK1DSYDG0",
"message": "We're working on a fix, hoping to ship in the next 30 minutes",
"new_incident_status": {
"category": "triage",
"created_at": "2021-08-17T13:28:57.801578Z",
"description": "Impact has been **fully mitigated**, and we're ready to learn from this incident.",
"id": "01FCNDV6P870EA6S7TK1DSYD5H",
"name": "Closed",
"rank": 4,
"updated_at": "2021-08-17T13:28:57.801578Z"
},
"new_severity": {
"created_at": "2021-08-17T13:28:57.801578Z",
"description": "Issues with **low impact**.",
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "Minor",
"rank": 1,
"updated_at": "2021-08-17T13:28:57.801578Z"
},
"updater": {
"alert": {
"id": "01GW2G3V0S59R238FAHPDS1R66",
"title": "*errors.withMessage: PG::Error failed to connect"
},
"api_key": {
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "My test API key"
},
"user": {
"email": "lisa@incident.io",
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "Lisa Karlin Curtis",
"role": "owner",
"slack_user_id": "U02AYNF2XJM"
},
"workflow": {
"id": "01FCNDV6P870EA6S7TK1DSYDG0",
"name": "My little workflow"
}
}
}
}