Replay Dead Deliveries API
Re-queues this webhook's dead-lettered deliveries so the normal delivery loop sends them again, signed exactly like a live event and with a full retry budget. A delivery is dead-lettered after it fails all 8 attempts over 21 minutes, which is what happens when your endpoint is down longer than that window; until you call this, it is never sent again. Deliveries that died for a permanent reason (a 410 Gone, or a webhook you deleted) are deliberately not replayed, because they would fail identically, and are reported as skipped_permanent instead. Cost: Free per call.
POST webhook/{id}/redrive re-queues a webhook's dead-lettered deliveries on twitterapis.com so they are delivered again with a fresh retry budget, and returns requeued (how many were put back in the queue) and skipped_permanent (how many were deliberately left alone because they failed for a permanent reason). It is bounded by max_age_hours (default 24) and limit (default 100, oldest first), costs 0 credits, and returns 409 if the webhook is disabled.
Authorization
bearerAuth Pass your API key as a bearer token on every request: Authorization: Bearer <API_KEY>.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/webhook/{id}/redrive" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "e4a1f9c2-3b7d-4a88-9f1e-2c6d8b4a5e10", "requeued": 2, "skipped_permanent": 0, "max_age_hours": 24, "limit": 100}{ "error": "bad_request", "message": "Missing or malformed parameter. Fix the request before retrying."}{ "error": "unauthorized", "message": "The API key is missing, malformed, or revoked. Check the Authorization header."}{ "error": "insufficient_credits", "message": "Your balance is exhausted. Top up your credits to continue."}{ "error": "forbidden", "message": "The acting account is not authorized for this write action, or has no logged-in session."}{ "error": "not_found", "message": "The resource does not exist, for example a deleted tweet or a private account."}{ "error": "rate_limited", "message": "Too many requests. Back off and retry with exponential backoff."}{ "error": "server_error", "message": "Something failed on our side. Retry with backoff; if it persists, contact support."}Pricing
| Unit | Price |
|---|---|
| Per call | Free |
When to use
Use this after your endpoint recovers from an outage that lasted longer than the 21-minute retry window, when you want the events that were dead-lettered during it rather than a gap in your data. Unlike Test Webhook, which fires one synthetic event to check connectivity, this replays the real events you actually missed.
Notes
- Replace {id} with the webhook's id.
- Returns HTTP 409 when the webhook is disabled. A webhook is disabled after your endpoint answers 410 Gone, which tells us the destination is gone, so re-register it before replaying.
- Replayed deliveries carry the same signature scheme and the same payload as the original, so your handler needs no special case. Make it idempotent on the event id if a duplicate would matter to you.
- Send an empty body to accept the defaults.
Related endpoints
- Create Monitor: Watch an X account for new posts and push them to your webhook(s).
- List Monitors: List every monitor on your account.
FAQ
Will replaying send me duplicates?
Only if the original delivery actually reached you and your endpoint failed to return a 2xx in time. A delivery is dead-lettered after 8 failed attempts, so in the normal case you never received it. Make your handler idempotent on the event id if a duplicate would cause a problem.
Why were some of my dead deliveries not replayed?
Deliveries that died for a permanent reason are skipped on purpose and counted in skipped_permanent. That means a 410 Gone from your endpoint, or a webhook that was deleted. Replaying those would fail identically and consume the retry budget again.
Webhook Delivery Payload
The exact JSON body a monitor POSTs to your webhook when a watched account posts, the signature headers that come with it, and how media (photos, video, animated GIFs) is represented.
Overview
Spaces: Read an X Space by id: title, host, speakers, topics, timing and audience counts, for a Space that is scheduled, running or already ended.