Skip to content

A Webhook Delivery

GET
/projects/{projectId}/monitors/{monitorId}/deliveries/{deliveryId}
Code sample: Shell / cURL
curl --request GET \
--url https://api.uup.dev/v1/projects/prj_01J9Z3K8X4M2N6P8Q0R2S4T6V8/monitors/example/deliveries/example \
--header 'Authorization: Bearer <token>'

One of the Monitor’s Webhook Deliveries: the request its last attempt sent, its URL, headers and body exactly as sent, and every attempt with what came back. A Channel’s Delivery is 404.

projectId
required

The Project’s identifier, prj_….

string

Example

prj_01J9Z3K8X4M2N6P8Q0R2S4T6V8

The Project’s identifier, prj_….

monitorId
required

The Monitor’s identifier, mon_….

string

The Monitor’s identifier, mon_….

deliveryId
required

The Delivery’s identifier, dlv_….

string

The Delivery’s identifier, dlv_….

The Delivery.

Media typeapplication/json

A Webhook Delivery with its request and attempts.

object
delivery
required

One message, and what happened to it.

object
id
required

The Delivery’s identifier, dlv_….

string
checkId
required

The Check it is about, or null for a Webhook’s test.

string | null
kind
required
string
Allowed values: down up flapping correction regional_outage regional_recovery regional_correction warning disabled paused resolved repeat burst burst_repeat burst_recovery digest channel_disabled test
eventType
required

Null for a test.

string | null
Allowed values: uptime.failed uptime.recovered certificate.failed certificate.recovered domain.failed domain.recovered certificate.expiring domain.expiring domain.unreadable performance.degraded uptime.family_failing uptime.regional_outage
status
required
string
Allowed values: queued held sent digested grouped failed cancelled skipped_unverified skipped_opt_out skipped_disabled skipped_duplicate skipped_no_credits
holdReason
required

Why a held one waits.

string | null
Allowed values: wait symptom snooze digest outage burst
channel
required

The Channel it went to, or null for a Webhook’s.

object
id
required
string
type
required
string
Allowed values: email slack discord telegram msteams inbox sms whatsapp
name
required
string
webhook
required

The Webhook it went to, or null for a Channel’s.

object
id
required
string
address
required
string
incidentId
required
string | null
regionalOutageId
required
string | null
location
required

The Regional outage’s location, or null.

string | null
lastError
required

Why its last attempt failed.

string | null
digest
required

For a warning a digest carried.

object
closedAt
required

When the digest closed.

string format: date-time
timezone
required
string
recipients
required

For email, each address that did not simply receive it.

Array<object>
object
address
required
string
status
required
string
Allowed values: queued sent failed cancelled skipped_opt_out skipped_disabled skipped_duplicate
lastError
required
string | null
through
required
string | null
bouncedAt
required

When it bounced, or null.

string | null format: date-time
attempts
required

For a Webhook’s, what its attempts came to. Null for a Channel’s.

object
count
required
integer
statusCode
required
integer | null
errorKind
required
string | null
Allowed values: dns_failure address_refused connection_refused connection_reset timeout tls_handshake_failed certificate_expired certificate_invalid domain_expired registry_unreadable no_signal redirect_downgrade too_many_redirects redirect_invalid port_blocked unexpected_status keyword_missing keyword_present json_mismatch json_invalid body_truncated read_failed no_reply packet_loss probe_unavailable unreachable
durationMs
required
number
firstAt
required

When the first attempt started.

string format: date-time
createdAt
required

When it was written.

string format: date-time
sentAt
required

When it was sent, or null.

string | null format: date-time
request
required

What its last attempt sent, or null once the body is no longer kept.

object
method
required
string
url
required
string
headers
required
object
key
additional properties
string
body
required
string
attempts
required
Array<object>

One try at a Webhook Delivery.

object
number
required
integer
startedAt
required

When it started.

string format: date-time
durationMs
required
number
statusCode
required
integer | null
errorKind
required
string | null
Allowed values: dns_failure address_refused connection_refused connection_reset timeout tls_handshake_failed certificate_expired certificate_invalid domain_expired registry_unreadable no_signal redirect_downgrade too_many_redirects redirect_invalid port_blocked unexpected_status keyword_missing keyword_present json_mismatch json_invalid body_truncated read_failed no_reply packet_loss probe_unavailable unreachable
responseHeaders
required
object | null
responseBody
required

At most its first kilobyte.

string | null
by
required

Who made it: the sending job, a Member, or an API token.

string
Allowed values: job member api_token
memberName
required

The Member’s name, or null.

string | null
tokenName
required

The API token’s name, or null.

string | null

Example

{
"delivery": {
"kind": "down",
"eventType": "uptime.failed",
"status": "queued",
"holdReason": "wait",
"channel": {
"type": "email"
},
"recipients": [
{
"status": "queued"
}
],
"attempts": {
"errorKind": "dns_failure"
}
},
"attempts": [
{
"errorKind": "dns_failure",
"by": "job"
}
]
}

The request was refused: invalid_request names the field at fault.

Media typeapplication/json

A refusal.

object
error
required
object
code
required

What was refused, stable across releases. New codes may be added, so handle a code you do not know as its status says.

string
Allowed values: invalid_request bad_identifier unauthenticated forbidden not_found not_entitled rate_limited interval_below_floor timeout_below_floor url_missing check_not_applicable port_blocked target_cap_reached too_few_locations location_unavailable uptime_always_on monitor_busy monitor_suspended project_suspended validation_required validation_unavailable validation_rate_limited validation_expired validation_mismatch validation_failed default_rule_is_fixed name_taken paid_needs_email paid_rule_sends_nothing webhook_url_refused address_refused event_type_not_on_monitor too_many_webhooks url_taken
message
required

What to do, in the dashboard’s words. It may change, so never branch on it.

string
field

The field at fault, on a 400 invalid_request.

string
kind

On a 402 not_entitled: what the Plan allows no more of.

string
Allowed values: project monitor heartbeat location
plan

On a 402: the Plan’s name.

string
limit

On a 402: what the Plan allows. On a 422 target_cap_reached: the cap’s figure.

integer
used

On a 402: what is in use, or for locations, how many were asked.

integer
cap

On a 422 target_cap_reached: which cap the Monitor would pass.

string
key

On a 422 target_cap_reached: the site the cap counts, by its host.

string
location

On a 422 target_cap_reached: the location the cap was reached from.

string
current

On a 422 target_cap_reached: what the cap counts now, before this Monitor.

integer
rules

On a 409 paid_needs_email: the names of the saved rules it would break.

Array<string>
eventTypes

On a 400 event_type_not_on_monitor: the events this Monitor never sends.

Array<string>

Example

{
"error": {
"code": "invalid_request",
"kind": "project"
}
}

No working API token: unauthenticated.

Media typeapplication/json

A refusal.

object
error
required
object
code
required

What was refused, stable across releases. New codes may be added, so handle a code you do not know as its status says.

string
Allowed values: invalid_request bad_identifier unauthenticated forbidden not_found not_entitled rate_limited interval_below_floor timeout_below_floor url_missing check_not_applicable port_blocked target_cap_reached too_few_locations location_unavailable uptime_always_on monitor_busy monitor_suspended project_suspended validation_required validation_unavailable validation_rate_limited validation_expired validation_mismatch validation_failed default_rule_is_fixed name_taken paid_needs_email paid_rule_sends_nothing webhook_url_refused address_refused event_type_not_on_monitor too_many_webhooks url_taken
message
required

What to do, in the dashboard’s words. It may change, so never branch on it.

string
field

The field at fault, on a 400 invalid_request.

string
kind

On a 402 not_entitled: what the Plan allows no more of.

string
Allowed values: project monitor heartbeat location
plan

On a 402: the Plan’s name.

string
limit

On a 402: what the Plan allows. On a 422 target_cap_reached: the cap’s figure.

integer
used

On a 402: what is in use, or for locations, how many were asked.

integer
cap

On a 422 target_cap_reached: which cap the Monitor would pass.

string
key

On a 422 target_cap_reached: the site the cap counts, by its host.

string
location

On a 422 target_cap_reached: the location the cap was reached from.

string
current

On a 422 target_cap_reached: what the cap counts now, before this Monitor.

integer
rules

On a 409 paid_needs_email: the names of the saved rules it would break.

Array<string>
eventTypes

On a 400 event_type_not_on_monitor: the events this Monitor never sends.

Array<string>

Example

{
"error": {
"code": "invalid_request",
"kind": "project"
}
}

This token may not do this: forbidden.

Media typeapplication/json

A refusal.

object
error
required
object
code
required

What was refused, stable across releases. New codes may be added, so handle a code you do not know as its status says.

string
Allowed values: invalid_request bad_identifier unauthenticated forbidden not_found not_entitled rate_limited interval_below_floor timeout_below_floor url_missing check_not_applicable port_blocked target_cap_reached too_few_locations location_unavailable uptime_always_on monitor_busy monitor_suspended project_suspended validation_required validation_unavailable validation_rate_limited validation_expired validation_mismatch validation_failed default_rule_is_fixed name_taken paid_needs_email paid_rule_sends_nothing webhook_url_refused address_refused event_type_not_on_monitor too_many_webhooks url_taken
message
required

What to do, in the dashboard’s words. It may change, so never branch on it.

string
field

The field at fault, on a 400 invalid_request.

string
kind

On a 402 not_entitled: what the Plan allows no more of.

string
Allowed values: project monitor heartbeat location
plan

On a 402: the Plan’s name.

string
limit

On a 402: what the Plan allows. On a 422 target_cap_reached: the cap’s figure.

integer
used

On a 402: what is in use, or for locations, how many were asked.

integer
cap

On a 422 target_cap_reached: which cap the Monitor would pass.

string
key

On a 422 target_cap_reached: the site the cap counts, by its host.

string
location

On a 422 target_cap_reached: the location the cap was reached from.

string
current

On a 422 target_cap_reached: what the cap counts now, before this Monitor.

integer
rules

On a 409 paid_needs_email: the names of the saved rules it would break.

Array<string>
eventTypes

On a 400 event_type_not_on_monitor: the events this Monitor never sends.

Array<string>

Example

{
"error": {
"code": "invalid_request",
"kind": "project"
}
}

No such thing, or not one this token reaches: not_found.

Media typeapplication/json

A refusal.

object
error
required
object
code
required

What was refused, stable across releases. New codes may be added, so handle a code you do not know as its status says.

string
Allowed values: invalid_request bad_identifier unauthenticated forbidden not_found not_entitled rate_limited interval_below_floor timeout_below_floor url_missing check_not_applicable port_blocked target_cap_reached too_few_locations location_unavailable uptime_always_on monitor_busy monitor_suspended project_suspended validation_required validation_unavailable validation_rate_limited validation_expired validation_mismatch validation_failed default_rule_is_fixed name_taken paid_needs_email paid_rule_sends_nothing webhook_url_refused address_refused event_type_not_on_monitor too_many_webhooks url_taken
message
required

What to do, in the dashboard’s words. It may change, so never branch on it.

string
field

The field at fault, on a 400 invalid_request.

string
kind

On a 402 not_entitled: what the Plan allows no more of.

string
Allowed values: project monitor heartbeat location
plan

On a 402: the Plan’s name.

string
limit

On a 402: what the Plan allows. On a 422 target_cap_reached: the cap’s figure.

integer
used

On a 402: what is in use, or for locations, how many were asked.

integer
cap

On a 422 target_cap_reached: which cap the Monitor would pass.

string
key

On a 422 target_cap_reached: the site the cap counts, by its host.

string
location

On a 422 target_cap_reached: the location the cap was reached from.

string
current

On a 422 target_cap_reached: what the cap counts now, before this Monitor.

integer
rules

On a 409 paid_needs_email: the names of the saved rules it would break.

Array<string>
eventTypes

On a 400 event_type_not_on_monitor: the events this Monitor never sends.

Array<string>

Example

{
"error": {
"code": "invalid_request",
"kind": "project"
}
}

Too many requests: rate_limited. Retry-After says when to try again.

Media typeapplication/json

A refusal.

object
error
required
object
code
required

What was refused, stable across releases. New codes may be added, so handle a code you do not know as its status says.

string
Allowed values: invalid_request bad_identifier unauthenticated forbidden not_found not_entitled rate_limited interval_below_floor timeout_below_floor url_missing check_not_applicable port_blocked target_cap_reached too_few_locations location_unavailable uptime_always_on monitor_busy monitor_suspended project_suspended validation_required validation_unavailable validation_rate_limited validation_expired validation_mismatch validation_failed default_rule_is_fixed name_taken paid_needs_email paid_rule_sends_nothing webhook_url_refused address_refused event_type_not_on_monitor too_many_webhooks url_taken
message
required

What to do, in the dashboard’s words. It may change, so never branch on it.

string
field

The field at fault, on a 400 invalid_request.

string
kind

On a 402 not_entitled: what the Plan allows no more of.

string
Allowed values: project monitor heartbeat location
plan

On a 402: the Plan’s name.

string
limit

On a 402: what the Plan allows. On a 422 target_cap_reached: the cap’s figure.

integer
used

On a 402: what is in use, or for locations, how many were asked.

integer
cap

On a 422 target_cap_reached: which cap the Monitor would pass.

string
key

On a 422 target_cap_reached: the site the cap counts, by its host.

string
location

On a 422 target_cap_reached: the location the cap was reached from.

string
current

On a 422 target_cap_reached: what the cap counts now, before this Monitor.

integer
rules

On a 409 paid_needs_email: the names of the saved rules it would break.

Array<string>
eventTypes

On a 400 event_type_not_on_monitor: the events this Monitor never sends.

Array<string>

Example

{
"error": {
"code": "invalid_request",
"kind": "project"
}
}