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 format: int32
pageSize
integer format: int32
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
attemptCount

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

integer format: int32
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
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
eventType
string
firstAttemptedAt

When this delivery’s first attempt was made.

string format: date-time
newestDurationMs
null | integer format: int64
newestOutcome
string
newestRound
null | integer format: int32
newestStatusCode
null | integer format: int32
nextAttemptDueAt
null | string format: date-time
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
rotationId
string
totalRounds
integer format: int32
page
integer format: int32
pageSize
integer format: int32
totalItems
integer format: int64
totalPages
integer format: int32
Examplegenerated
{
"data": [
{
"attemptCount": 1,
"deliveryId": "example",
"estimatedGivesUpAt": "2026-04-15T12:00:00Z",
"eventType": "example",
"firstAttemptedAt": "2026-04-15T12:00:00Z",
"newestDurationMs": 1,
"newestOutcome": "example",
"newestRound": 1,
"newestStatusCode": 1,
"nextAttemptDueAt": "2026-04-15T12:00:00Z",
"onLadder": true,
"rotationId": "example",
"totalRounds": 1
}
],
"page": 1,
"pageSize": 1,
"totalItems": 1,
"totalPages": 1
}

Bad Request

Media typeapplication/json
object
detail
null | string
instance
null | string
status
null | integer format: int32
title
null | string
type
null | string
Examplegenerated
{
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}

Unauthorized

Media typeapplication/json
object
detail
null | string
instance
null | string
status
null | integer format: int32
title
null | string
type
null | string
Examplegenerated
{
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}

Forbidden

Media typeapplication/json
object
detail
null | string
instance
null | string
status
null | integer format: int32
title
null | string
type
null | string
Examplegenerated
{
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}

Not Found

Media typeapplication/json
object
detail
null | string
instance
null | string
status
null | integer format: int32
title
null | string
type
null | string
Examplegenerated
{
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}