Change events
Record a change event
POST
/
change-events
Ingest a deploy / commit / release event for status-transition correlation
curl --request POST \
--url https://use.observer/api/v1/change-events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source": "ci",
"kind": "deploy",
"ref": "abc123",
"title": "<string>",
"url": "<string>",
"service": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"dedupe_key": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
source: 'ci',
kind: 'deploy',
ref: 'abc123',
title: '<string>',
url: '<string>',
service: '<string>',
occurred_at: '2023-11-07T05:31:56Z',
dedupe_key: '<string>'
})
};
fetch('https://use.observer/api/v1/change-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://use.observer/api/v1/change-events"
payload = {
"source": "ci",
"kind": "deploy",
"ref": "abc123",
"title": "<string>",
"url": "<string>",
"service": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"dedupe_key": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"recorded": true,
"deduped": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}Authorizations
An organization API key (obs_pub_…) sent as Authorization: Bearer <key>. Each key carries scopes; an endpoint lists the scope it needs.
Body
application/json
Example:
"ci"
Available options:
deploy, commit, release, k8s_event, other Example:
"abc123"
http(s) only
service name to scope correlation
idempotency key for re-delivery
Was this page helpful?
⌘I
Ingest a deploy / commit / release event for status-transition correlation
curl --request POST \
--url https://use.observer/api/v1/change-events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source": "ci",
"kind": "deploy",
"ref": "abc123",
"title": "<string>",
"url": "<string>",
"service": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"dedupe_key": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
source: 'ci',
kind: 'deploy',
ref: 'abc123',
title: '<string>',
url: '<string>',
service: '<string>',
occurred_at: '2023-11-07T05:31:56Z',
dedupe_key: '<string>'
})
};
fetch('https://use.observer/api/v1/change-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://use.observer/api/v1/change-events"
payload = {
"source": "ci",
"kind": "deploy",
"ref": "abc123",
"title": "<string>",
"url": "<string>",
"service": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"dedupe_key": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"recorded": true,
"deduped": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}{
"type": "https://docs.use.observer/api/getting-started/errors#forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: write:incidents"
}
