Skip to content

List an endpoint's deliveries

GET
/v1/webhooks/{webhookId}/deliveries
curl --request GET \
--url 'https://api.roundrobinbot.eu/v1/webhooks/example/deliveries?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z' \
--header 'Authorization: Bearer <token>'

Every delivery we attempted against this endpoint inside a window you name: the event, the rotation it happened on, what your server last answered, and how many attempts it took. One row is one delivery, not one attempt, so a delivery your server refused twice and then accepted is one row with attemptCount: 3 rather than three rows sharing a deliveryId. Read GET /v1/webhooks/{webhookId}/deliveries/{deliveryId}/attempts for one delivery’s ladder with the exact bytes each attempt carried. Filter by eventType, rotationId and outcome, or by failuresOnly=true for every outcome but delivered and cancelled: a delivery you cancelled yourself is not a failure. from and to are both required and no more than 90 days apart; the log itself keeps 30 days, so an older window is answered honestly with nothing. Oldest first, like every collection here. Ask for sort=at|desc for the newest. No ETag: a page is assembled from many rows, so no single version stands behind it.

webhookId
required
string
from
required
string format: date-time
to
required
string format: date-time
eventType
string
rotationId
string
outcome
string
failuresOnly
boolean
page
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
pageSize
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
sort
string

OK

Media typeapplication/json

The envelope every /v1 collection comes back in.

object
data
Array<object>

One row of the list: one whole delivery, not one attempt.

object
deliveryId

The id your receiver deduplicates on, shared by every attempt of this delivery. Pass it to POST /v1/webhooks/{webhookId}/deliveries/{deliveryId}/cancel to stop it.

string
eventType
string
rotationId
string
firstAttemptedAt

When this delivery’s first attempt was made.

string format: date-time
newestOutcome
string
newestStatusCode
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
newestDurationMs
null | integer | string format: int64
/^-?(?:0|[1-9]\d*)$/
attemptCount

How many rows this delivery has, real sends and terminal states alike.

integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
onLadder

Whether this delivery is still climbing the retry ladder: its newest attempt ended in something a later attempt can still follow, and we are still enabled to make one.

boolean
newestRound
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
totalRounds
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
nextAttemptDueAt
null | string format: date-time
estimatedGivesUpAt

Roughly when the retry ladder would give up on this delivery, if every round after its next attempt waits no longer than its own default.

null | string format: date-time
page
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
pageSize
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
totalItems
integer | string format: int64
/^-?(?:0|[1-9]\d*)$/
totalPages
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
Examplegenerated
{
"data": [
{
"deliveryId": "example",
"eventType": "example",
"rotationId": "example",
"firstAttemptedAt": "2026-04-15T12:00:00Z",
"newestOutcome": "example",
"newestStatusCode": 1,
"newestDurationMs": 1,
"attemptCount": 1,
"onLadder": true,
"newestRound": 1,
"totalRounds": 1,
"nextAttemptDueAt": "2026-04-15T12:00:00Z",
"estimatedGivesUpAt": "2026-04-15T12:00:00Z"
}
],
"page": 1,
"pageSize": 1,
"totalItems": 1,
"totalPages": 1
}

Bad Request

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Unauthorized

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Forbidden

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Not Found

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}