# Redeliver events for a webhook. Redelivers events selected by the request parameters. Only events from the last 30 days can be redelivered. At least one of the `occurred_at.lte` or `occurred_at.gte` fields must be provided in the request body. A maximum of 100 events will be redelivered per request. Limited to 500 events every hour. This endpoint requires the `personio:webhooks:write` scope. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "title": "Webhooks Management API", "version": "2.0.0", "description": "Endpoints to manage webhooks." }, "servers": [ { "url": "https://api.personio.de" } ], "security": [ { "BearerAuth": [] } ], "paths": { "/v2/webhooks/{id}/redelivery": { "post": { "summary": "Redeliver events for a webhook.", "description": "Redelivers events selected by the request parameters. Only events from the last 30 days can be redelivered.\nAt least one of the `occurred_at.lte` or `occurred_at.gte` fields must be provided in the request body.\nA maximum of 100 events will be redelivered per request.\nLimited to 500 events every hour.\nThis endpoint requires the `personio:webhooks:write` scope.\n", "tags": [ "Webhooks" ], "parameters": [ { "name": "id", "in": "path", "required": true, "description": "The unique identifier of the webhook whose events are to be redelivered.", "schema": { "type": "string" } } ], "x-path-examples": { "200 redelivery valid request": { "value": "/v2/webhooks/2e4324b0-1b0e-11ee-a7f7-e37ffd9b3a44/redelivery" }, "200 redelivery empty response": { "value": "/v2/webhooks/2e4324b0-1b0e-11ee-a7f7-e37ffd9b3a44/redelivery" }, "400 redelivery missing occurred_at range": { "value": "/v2/webhooks/2e4324b0-1b0e-11ee-a7f7-e37ffd9b3a44/redelivery" } }, "requestBody": { "$ref": "#/components/requestBodies/TriggerRedeliveryRequest" }, "responses": { "202": { "$ref": "#/components/responses/TriggerRedeliveryResponse" }, "400": { "$ref": "#/components/responses/TriggerRedeliveryBadRequest" }, "403": { "$ref": "#/components/responses/WebhookAccessForbiddenErrorResponse" }, "404": { "$ref": "#/components/responses/WebhookNotFoundErrorResponse" } } } } }, "components": { "securitySchemes": { "BearerAuth": { "type": "http", "scheme": "bearer" } }, "schemas": { "TriggerRedeliveryRequest": { "description": "Redelivery request schema", "type": "object", "anyOf": [ { "type": "object", "description": "Redelivery request schema with 'occurred_at.gte' as the required field.", "properties": { "occurred_at.gte": { "type": "string", "format": "date-time", "description": "The end date for selecting events by occurred date. Only events occurred on or after this date will be included.", "example": "2023-01-01T12:00:00.000Z" }, "occurred_at.lte": { "type": "string", "format": "date-time", "description": "The start date for selecting events by occurred date. Only events occurred on or after this date will be included.", "example": "2023-01-01T13:00:00.000Z" }, "event_name": { "type": "string", "description": "Enables selecting by event name. Refer to the [event catalog](https://developer.personio.de/v2.0/reference/webhooks#event-catalog) for a list of valid event names.", "example": "person.updated" } }, "required": [ "occurred_at.gte" ] }, { "type": "object", "description": "Redelivery request schema with 'occurred_at.lte' as the required field.", "properties": { "occurred_at.gte": { "type": "string", "format": "date-time", "description": "The end date for selecting events by occurred date. Only events occurred on or after this date will be included.", "example": "2023-01-01T12:00:00.000Z" }, "occurred_at.lte": { "type": "string", "format": "date-time", "description": "The start date for selecting events by occurred date. Only events occurred on or after this date will be included.", "example": "2023-01-01T13:00:00.000Z" }, "event_name": { "type": "string", "description": "Enables selecting by event name. Refer to the [event catalog](https://developer.personio.de/v2.0/reference/webhooks#event-catalog) for a list of valid event names.", "example": "person.updated" } }, "required": [ "occurred_at.lte" ] } ] } }, "requestBodies": { "TriggerRedeliveryRequest": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TriggerRedeliveryRequest" }, "examples": { "200 redelivery valid request": { "$ref": "#/components/examples/ValidRedeliveryRequestPayload" }, "200 redelivery empty response": { "$ref": "#/components/examples/ValidRedeliveryRequestPayload" }, "400 redelivery missing occurred_at range": { "$ref": "#/components/examples/InvalidOccurredAtRangeRedeliveryRequestPayload" } } } } } }, "responses": { "WebhookNotFoundErrorResponse": { "description": "The webhook could not be found.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/responses/WebhookTestEventBadRequest/content/application~1problem%2Bjson/schema" }, "examples": { "Resource Not Found": { "$ref": "#/components/examples/WebhookNotFoundErrorResponse" } } } } }, "WebhookAccessForbiddenErrorResponse": { "description": "Access to the webhook is forbidden.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/responses/WebhookTestEventBadRequest/content/application~1problem%2Bjson/schema" }, "examples": { "Access Forbidden": { "$ref": "#/components/examples/WebhookAccessForbiddenErrorResponse" } } } } }, "TriggerRedeliveryResponse": { "description": "Redelivery request accepted.", "content": { "application/json": { "schema": { "type": "object", "properties": { "redelivery_id": { "type": "string", "description": "The ID of the redelivery operation." }, "earliest_occurred_at": { "type": "string", "format": "date-time", "description": "The occurred date of the earliest event to be redelivered in UTC." }, "latest_occurred_at": { "type": "string", "format": "date-time", "description": "The occurred date of the latest event to be redelivered in UTC." }, "total": { "type": "integer", "description": "The total number of events to be redelivered." } }, "required": [ "redelivery_id", "total" ] }, "examples": { "200 redelivery valid request": { "$ref": "#/components/examples/TriggerRedeliveryResponse" }, "200 redelivery empty response": { "$ref": "#/components/examples/TriggerRedeliveryEmptyResponse" } } } } }, "TriggerRedeliveryBadRequest": { "description": "The redelivery request cannot be processed due to faulty input payload.", "content": { "application/problem+json": { "schema": { "$ref": "#/components/responses/WebhookTestEventBadRequest/content/application~1problem%2Bjson/schema" }, "examples": { "400 redelivery missing occurred_at range": { "$ref": "#/components/examples/TriggerRedeliveryMissingRangeResponse" } } } } }, "WebhookTestEventBadRequest": { "description": "Bad request - invalid event name, event not enabled, or missing required payload data.", "content": { "application/problem+json": { "schema": { "type": "object", "description": "This object represents an error response.", "properties": { "personio_trace_id": { "type": "string", "example": "aswo3f-a202lfso-312123sld-1230ddd", "description": "A unique ID that was created for this error." }, "timestamp": { "type": "string", "format": "date-time", "example": "2021-05-28T11:17:30.000Z", "description": "The timestamp of when the error occurred." }, "errors": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "example": "Not found", "description": "The title of the error." }, "detail": { "type": "string", "example": "The requested resource was not found.", "description": "A short description about the error." }, "type": { "type": "string", "format": "uri", "example": "https://developer.personio.de/reference/errors#common.requested_resource_not_found", "description": "A link to the developer hub where more information can be found for the encountered error." }, "_meta": { "type": "object", "additionalProperties": { "type": "string" } } } } } } }, "examples": { "400 missing required payload data": { "$ref": "#/components/examples/TestEventMissingPayloadDataResponse" } } } } } }, "examples": { "WebhookAccessForbiddenErrorResponse": { "value": { "personio_trace_id": "aswo3f-a202lfso-312123sld-1230ddd", "timestamp": "2021-05-28T11:17:30Z", "errors": [ { "title": "Access denied", "detail": "Access denied to perform webhook operations" } ] } }, "WebhookNotFoundErrorResponse": { "value": { "personio_trace_id": "aswo3f-a202lfso-312123sld-1230ddd", "timestamp": "2021-05-28T11:17:30Z", "errors": [ { "title": "Webhook not found", "detail": "No webhook found matching the given id" } ] } }, "ValidRedeliveryRequestPayload": { "value": { "occurred_at.gte": "2024-05-23T00:00:00Z", "occurred_at.lte": "2024-05-30T13:59:59Z", "event_name": "person.updated" } }, "InvalidOccurredAtRangeRedeliveryRequestPayload": { "value": { "event_name": "person.updated" } }, "TriggerRedeliveryResponse": { "value": { "redelivery_id": "2da86fee-6e01-488b-9071-e6ad49a33c80", "earliest_occurred_at": "2024-05-28T11:17:30Z", "latest_occurred_at": "2024-05-29T12:00:25Z", "total": 12 } }, "TriggerRedeliveryEmptyResponse": { "value": { "redelivery_id": "2da86fee-6e01-488b-9071-e6ad49a33c80", "earliest_occurred_at": null, "latest_occurred_at": null, "total": 0 } }, "TriggerRedeliveryMissingRangeResponse": { "value": { "personio_trace_id": "aswo3f-a202lfso-312123sld-1230ddd", "timestamp": "2021-05-28T11:17:30Z", "errors": [ { "title": "Missing required fields: occurred_at.gte and occurred_at.lte", "detail": "At least one of 'occurred_at.gte' or 'occurred_at.lte' must be provided." } ] } } } } } ```