{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["img","small-center"]},"type":"markdown"},"seo":{"title":"Replay webhook deliveries","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"replay-webhook-deliveries","__idx":0},"children":["Replay webhook deliveries"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Spotnana delivers webhook events (such as PNR and trip updates) to your consumer endpoints. If your endpoint has failed to receive the event due to an issue (e.g., an outage in your system, network connectivity issues, or expired credentials, etc.), Spotnana allows you to replay failed webhook deliveries using our ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://developers.spotnana.com"},"children":["Developer portal"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay"]}," feature lets you re-send past webhook deliveries directly from the Developer portal. You can use this feature to re-send both successful and failed events on demand."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," A replay re-sends the exact same event payload that was originally sent, but as a fresh delivery attempt to your endpoint."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can use replay to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["recover events that failed while your endpoint was down during an outage."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["re-send events after fixing a bug in your webhook consumer."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["re-sync a specific trip or a PNR by requesting that its events (both successful and failed) be delivered again."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"difference-between-a-retry-and-replay","__idx":1},"children":["Difference between a retry and replay"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The term ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Retry"]}," in the Spotnana platform indicates that the failed delivery of a webhook will automatically be retried. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/webhooks/webhook-delivery#retry-mechanism"},"children":["retry mechanism"]}," to understand more about this process."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replaying"]}," is a process of manually attempting to re-deliver a webhook event using the Spotnana ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://developers.spotnana.com"},"children":["Developer portal"]},". See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#steps-to-replay-a-webhook-using-the-developer-portal"},"children":["webhook replay procedure"]}," for step-by-step instructions."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If a webhook delivery is currently in a retrying status, it can also be subsequently queued to be replayed. In this scenario, after the original delivery succeeds or fails, the replay process will begin."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The replayed delivery will also have its own retry schedule as mentioned in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/webhooks/webhook-delivery#retry-mechanism"},"children":["retry mechanism"]}," (if it fails to be delivered)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":2},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before you begin using the replay feature, you must:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["have access to the Spotnana ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://developers.spotnana.com"},"children":["Developer portal"]},". Contact your Spotnana representative if you don't yet have access."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["have the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Developer Portal Administrator"]}," ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/spotnana/basic_rbac_concepts#roles"},"children":["role"]}," assigned to your user profile. This provides you with read access to view event deliveries for a specific company and write access to replay them."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["have at least one active webhook subscription in your organization."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," Replayed events are delivered to the same subscription endpoint as the original delivery, so ensure the subscription is active and the endpoint is reachable (i.e., it returns ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["200 OK"]}," response) before replaying."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"steps-to-replay-a-webhook-using-the-developer-portal","__idx":3},"children":["Steps to replay a webhook using the Developer portal"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following steps explain how to replay a webhook event using the Developer portal:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Login to the Developer portal using the URL: ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://developers.spotnana.com"},"children":["developers.spotnana.com"]},"."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Live"]}," or the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sandbox"]}," toggle to switch between production and non-production (non-prod) environments. The Sandbox environment is also directly available at ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://developers.partners.spotnana.com"},"children":["developers.partners.spotnana.com"]},"."]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/portal-login.f61503cda4360c8fbe89a96e92a11d121f3ca400f67e77bc31eaf70782a3ce36.ab49d4c1.png","alt":"Developer portal login page with the Live and Sandbox toggle","withLightbox":false,"width":"60%","height":"60%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once logged in, select your organization from the company menu. This should be the company that owns the specific webhook subscription that you wish to replay."]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/company-selector.22740f1b8950463bcc963abc34aaf490bd4419939468ee498079b54e676fb63c.ab49d4c1.png","alt":"Company selector menu in the Developer portal","withLightbox":false,"width":"40%","height":"40%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Go to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhooks"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Event Logs"]}," section."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/event-logs-navigation.0c365eea6781220341a51fb27e787de4373d06f1d0f9ca481904013d520fe052.ab49d4c1.png","alt":"Event Logs option under the Webhooks section in the left navigation","withLightbox":false,"width":"35%","height":"35%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This opens the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["View Mode"]}," and displays a log of all webhook events that have been sent by Spotnana for all active subscriptions. The list includes events that have been successfully delivered, have failed, are currently retrying, are queued to be sent, and are canceled."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Switch from ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["View Mode"]}," to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay Mode"]}," using the toggle on the top right."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/view-replay-mode-toggle.297f17cfb48d6ee6d199b855fc57eb1cfe286e0081c72491a7b3b81a7d38e547.ab49d4c1.png","alt":"View Mode and Replay Mode toggle","withLightbox":false,"width":"35%","height":"35%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay Mode"]}," displays all the webhook events that are available for you to replay."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/replay-mode-event-logs.fa0357a5719b34b25ae574ca874fd60d395d1981ecee8a0c4e84a5453471f530.ab49d4c1.png","alt":"Webhook events listed in the Replay Mode","withLightbox":false,"width":"100%","height":"100%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can filter the event logs using date range, a list of trip IDs or PNR IDs relevant to the event, delivery status, event type (e.g., ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/webhookeventapi/webhooks/paths/pnr_v3/post"},"children":["PNR_V3"]},"), and subscription name."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay Mode"]}," also displays events that have been successfully delivered, have failed, are currently retrying, are queued to be sent, and are canceled. You can replay any of the events from the list irrespective of the delivery status."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select the event rows that you wish to replay."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/replay-mode-select-events.34f1c95a5602f9e013a9c4efd8e2ef09d7218414c4100c747879d7c8337f8beb.ab49d4c1.png","alt":"Selected event rows in the Replay Mode","withLightbox":false,"width":"90%","height":"90%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/replay-button.e66f74c66ab424d4ed7c057420b22289c188f9dad2c5808b4932c0c43f6257e8.ab49d4c1.png","alt":"Replay button","withLightbox":false,"width":"40%","height":"40%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A confirmation page is displayed. Verify the events you've selected to replay and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Confirm Replay"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/replay-confirmation-dialog.686f3bc27ebba207f27d54b0ffa5bb0ed48c9cef460a824dc2d6b453fb21f0bb.ab49d4c1.png","alt":"Replay Webhook Deliveries confirmation dialog with the Confirm Replay button","withLightbox":false,"width":"80%","height":"80%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The screen automatically toggles to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["View Mode"]},". The events you replayed are displayed with a blue replay icon next to them in ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["View Mode"]},". You can monitor the status of the replayed events and check your endpoint to see if you've received the replayed event payload."]},{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/view-mode-replayed-event.e2c76bc7890d859412c5f8dbb90c41b233bb540ca1d18c13d764ff57a89b7447.ab49d4c1.png","alt":"Replayed webhook delivery displayed in the View Mode","withLightbox":false,"width":"100%","height":"100%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"SmallCenter","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Fig:"]}," The replayed webhook delivery displayed in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["View Mode"]},"."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/replayed-status-icon.fc53ab14b576ab626a08637022f8a706e031a3f2d9cd65b54be1acc1129cad0b.ab49d4c1.png","alt":"Delivery status with a blue replay icon next to it","withLightbox":false,"width":"35%","height":"35%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["View Mode"]},", use the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay History"]}," filter to view only the replayed events in the list. This helps you narrow down the events you want to monitor. All events with a status of ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Delivered"]}," indicate that your endpoint has successfully returned a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["200 OK"]}," message and received the replayed event payload."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/replay-history-filter.471fb61d6a12b36693673afa9ce31de683cc462f40d23fbcce215a1ccf22f88a.ab49d4c1.png","alt":"Replay History filter in the View Mode","withLightbox":false,"width":"40%","height":"40%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you wish to replay the same event again or to replay other events, toggle to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay Mode"]}," and repeat the process from step 4."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-to-expect-from-a-replay","__idx":4},"children":["What to expect from a replay?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keep the following delivery and payload behaviors in mind before replaying an event:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A replay creates a new delivery for each selected event. The original delivery record is preserved for audit purposes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The replayed delivery carries the same event ID and identical payload as the original."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["To your receiver endpoint, a replay looks like a fresh delivery. It is signed like any other webhook and receives a new webhook ID in the signature headers (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-spotnana-webhook-id"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Replayed requests additionally include the header ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-spotnana-replay-id"]},". This header contains the replay request's ID, so your endpoint can recognize and handle replay traffic in a special way, if needed."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"delivery-statuses","__idx":5},"children":["Delivery statuses"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following table explains each delivery status:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"15%","data-label":"Status"},"children":["Status "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"25%","data-label":"Meaning"},"children":["Meaning "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"60%","data-label":"Context"},"children":["Context "]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivered"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Successfully delivered"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your endpoint returned a 2xx response."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Retrying"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Awaiting retry attempt"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The last delivery attempt has failed and delivery is currently being retried automatically. The next attempt time is shown in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next Retry At"]}," column."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Failed"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery failed permanently"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All automatic retries were exhausted, or your endpoint returned HTTP 400. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," For a 400 response, no automatic retries are initiated. It's marked as failed immediately."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Ready"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Queued for delivery"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The delivery is queued and will be attempted shortly."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Canceled"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery was canceled"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The delivery was canceled. This typically occurs because the subscription was deactivated or the event payload could not be produced."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhook events with any of the above statuses can be replayed from the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://developers.spotnana.com"},"children":["Developer portal"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The status for the replayed events is displayed with a blue replay icon as shown below:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Image","attributes":{"src":"/assets/replayed-failed-status-icon.0909292a10ee864a67fea6c4338241b9041970cac2d4a4643b9bc5110485edef.ab49d4c1.png","alt":"Failed delivery status with a blue replay icon next to it","withLightbox":false,"width":"20%","height":"20%","align":"center","border":"1px solid black"},"children":[]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"replay-rules-and-limitations","__idx":6},"children":["Replay rules and limitations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following rules govern replay availability, request size, and delivery eligibility."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"25%","data-label":"Constraint"},"children":["Constraint "]},{"$$mdtype":"Tag","name":"th","attributes":{"width":"75%","data-label":"Detail"},"children":["Detail "]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Retention window"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Deliveries are available to view and replay for the current calendar month plus the previous three calendar months (UTC). For example, on July 22, 2026 the event deliveries back to April 1, 2026 (00:00 UTC) are available to view and replay. Deliveries older than this retention period cannot be viewed or replayed."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Replay size"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A maximum of 5000 replay deliveries are allowed in a single request."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Original deliveries only"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An already replayed delivery cannot be replayed again. To replay it, find the original event delivery in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay Mode"]}," and replay it again."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Any status is replayable"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Replay is not restricted to failed deliveries. Successfully delivered events can also be replayed if needed. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," When replaying an already successfully delivered event, your endpoint will receive a duplicate copy of the same event. Be sure to configure your endpoint to handle this replay scenario. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#best-practices"},"children":["best practices"]}," for more information."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"best-practices","__idx":7},"children":["Best practices"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Here are some best practices to keep in mind when using the replay feature:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Before replaying an event ensure the receiver endpoint is healthy."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When recovering from an incident, use the filters to view and replay only ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Failed"]}," events so you don't re-send events that already succeeded."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Design your consumer to be idempotent. Use the event ID to identify duplicate deliveries or use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-spotnana-replay-id"]}," header to handle the replay traffic separately."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A replayed payload is an exact copy of the original event. If you need the current state of a trip or PNR, fetch it from the respective APIs after receiving the event rather than relying on the replayed snapshot."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Verify every replay. Use the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replay History"]}," filter to confirm the replayed deliveries have reached your consumer endpoint."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Replay within the retention window. If an incident affected webhook consumption, schedule the replay promptly. Deliveries older than the retention period (i.e., older than the current month plus the 3 previous months) can no longer be replayed."]}]}]},"headings":[{"value":"Replay webhook deliveries","id":"replay-webhook-deliveries","depth":1},{"value":"Difference between a retry and replay","id":"difference-between-a-retry-and-replay","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Steps to replay a webhook using the Developer portal","id":"steps-to-replay-a-webhook-using-the-developer-portal","depth":2},{"value":"What to expect from a replay?","id":"what-to-expect-from-a-replay","depth":2},{"value":"Delivery statuses","id":"delivery-statuses","depth":2},{"value":"Replay rules and limitations","id":"replay-rules-and-limitations","depth":2},{"value":"Best practices","id":"best-practices","depth":2}],"frontmatter":{"seo":{"title":"Replay webhook deliveries"}},"lastModified":"2026-08-06T17:07:10.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/integration/dev-platform/replay-webhook-deliveries","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}