Webhooks · getWebhookDelivery
Get a webhook delivery
GET /v1/webhooks/{id}/deliveries/{deliveryId}
One webhook delivery with the exact payload sent and every attempt (status code, duration, the first 1 KB of the response, or the error). Never the request's headers or the secret.
- Who may call it
- humans: Owners and up
- Server
- https://api.logu.dev
Parameters#
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | required | The webhook endpoint's id (whk_…). · e.g. whk_01K7DC5E7G9J1L3N5Q7S9U1W3Y |
deliveryId | path | string | required | The webhook delivery's id (whd_…, also its webhook-id header). · e.g. whd_01K7DQ3M2X1K3M5P7R9T1V3X5Z |
Logu-Workspace | header | string | optional | Humans only: the workspace to act in (default: your personal workspace). Agents always act in their API key's workspace. · e.g. wsp_01K7D7Y8Z0B2D4F6H8K0M2P4R6 |
Example#
curl -s "https://api.logu.dev/v1/webhooks/whk_01K7DC5E7G9J1L3N5Q7S9U1W3Y/deliveries/whd_01K7DQ3M2X1K3M5P7R9T1V3X5Z" \
-H "Authorization: Bearer $LOGU_SESSION_TOKEN"
Responses#
200
The webhook delivery.
{
"id": "whd_01K7DQ3M2X1K3M5P7R9T1V3X5Z",
"endpointId": "whk_01K7DC5E7G9J1L3N5Q7S9U1W3Y",
"type": "ask.settled",
"status": "succeeded",
"attemptCount": 2,
"lastStatusCode": 200,
"lastAttemptAt": "2026-10-12T14:05:48.000Z",
"nextAttemptAt": null,
"createdAt": "2026-10-12T14:05:42.000Z",
"payload": {
"type": "ask.settled",
"timestamp": "2026-10-12T14:05:42.000Z",
"data": {
"ask": {
"id": "ask_01K7DQ3M2V8H4N6R9T1W3Y5B7C",
"project": "shop",
"channel": null,
"title": "Deploy v1.4 to production?",
"body": "3 commits since v1.3. CI is green.",
"icon": null,
"url": "https://github.com/acme/shop/compare/v1.3...v1.4",
"options": [
{
"id": "approve",
"label": "Approve",
"style": "primary"
},
{
"id": "decline",
"label": "Decline",
"style": "danger"
}
],
"allowText": false,
"status": "decided",
"decision": {
"optionId": "approve",
"text": null,
"decidedVia": "app",
"decidedAt": "2026-10-12T14:05:42.000Z",
"decidedBy": {
"id": "Xq3bY7tLmN2pR8sV",
"name": "Ana"
}
},
"defaultOption": "decline",
"expiresAt": "2026-10-12T15:03:11.000Z",
"createdAt": "2026-10-12T14:03:11.000Z",
"metadata": null,
"agent": {
"id": "agt_01K7D8F2H4K6M8P0R2T4V6X8Z0",
"name": "deploy-bot"
},
"attachments": [
{
"id": "att_01K7DQ6C8E0G2J4L6N8Q0S2U4W",
"url": "https://api.logu.dev/a/att_01K7DQ6C8E0G2J4L6N8Q0S2U4W?exp=1791824400&sig=q8Hk2mP0vX3nR5tY7wZ9bD1fG3jL5nQ7sU9wY1aC3eE",
"contentType": "image/png",
"size": 184320,
"width": 1440,
"height": 900,
"name": "checkout-after.png"
}
],
"test": false
}
}
},
"attempts": [
{
"number": 1,
"at": "2026-10-12T14:05:42.000Z",
"statusCode": 503,
"durationMs": 412,
"response": "Service Unavailable",
"error": null
},
{
"number": 2,
"at": "2026-10-12T14:05:48.000Z",
"statusCode": 200,
"durationMs": 87,
"response": "{\"ok\":true}",
"error": null
}
]
}
Response fields
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | required | |
endpointId | string | required | |
type | "ask.created" | "ask.settled" | "event.created" | "metric.alert" | "webhook.test" | required | |
status | "pending" | "succeeded" | "failed" | required | |
attemptCount | integer | required | |
lastStatusCode | integer | null | required | |
lastAttemptAt | string | null | required | date-time |
nextAttemptAt | string | null | required | date-time |
createdAt | string | required | date-time |
payload | any | optional | |
attempts | WebhookAttempt[] | required | |
attempts[].number | integer | required | |
attempts[].at | string | required | date-time |
attempts[].statusCode | integer | null | required | |
attempts[].durationMs | integer | required | |
attempts[].response | string | null | required | |
attempts[].error | string | null | required |
Errors#
Every error is {"error":{"code","message","hint","docUrl","requestId"}}: branch on code. See Errors.
| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | No credentials, or the API key or session is invalid or revoked. |
| 403 | forbidden | The caller is authenticated but may not do this (wrong role, or an API key on a human-only endpoint). |
| 404 | not_found | No such route, or the resource doesn't exist in your workspace. |
| 500 | internal_error | Something went wrong on Logu's side. |