Skip to main content

event.item_removed

Sent when one or more events are removed from a feed.

When This Event Fires

  • Events are removed because they no longer match feed criteria
  • Source website removes or deletes the event
  • Events are cleaned up due to being stale or expired
  • Bulk removal during source re-processing

Event Data Schema

The data field in the webhook payload contains the following structure:

FieldTypeRequiredDescription
timestampnumberYesUnix timestamp in milliseconds when the webhook was triggered
feedIdstring (uuid)YesID of the event feed that was updated
eventIdsarrayYesArray of event IDs that were removed from the feed

Example Payload

Complete example of a webhook payload for this event type:

{
"eventType": "event.item_removed",
"timestamp": 1704123456789,
"data": {
"timestamp": 1704123456789,
"feedId": "987e6543-e21b-12d3-a456-426614174111",
"eventIds": [
"123e4567-e89b-12d3-a456-426614174000",
"234e5678-e89b-12d3-a456-426614174001"
]
}
}

Handling This Event

When you receive an event.item_removed webhook, remove or archive the events from your system:

async function handleEventsRemoved(feedId: string, eventIds: string[]) {
// Soft delete - mark as removed with timestamp
await database.events.updateMany({
where: { helixEventId: { in: eventIds } },
data: { removedAt: new Date() },
});

// Or hard delete if you don't need history
// await database.events.deleteMany({
// where: { helixEventId: { in: eventIds } },
// });
}
Important Notes
  • Multiple events: Unlike item_added and item_updated, this webhook can contain multiple event IDs in a single notification.
  • Idempotent handling: The events may already be removed from your system. Make your removal logic idempotent.
  • Consider archiving: You may want to archive rather than delete, keeping a record that the event was once in your feed.

For information about HTTP headers, security verification, and retry policies, see the Webhooks Overview.

For complete documentation on event webhooks, see Events Webhooks.