{"Status":true,"Message":"","Response":{"post":{"postuid":"b21ce3ba-35f6-44a9-b4e0-211702106d82","tenantuid":"d8b744fc-2e70-4089-bb80-dd1d08f6c7b2","projectuid":"542e5f51-33cf-401f-aebe-4324ebe36fe4","title":"DailyStory Webhooks","slug":"docs/webhooks","html":"\u003Cp\u003EA webhook is a URL that DailyStory will send an HTTP POST with related data to when events occur within DailyStory. Using a webhook enables your application to receive notifications for events.\u003C/p\u003E\u003Ch2 id=\u0022manage_webhooks\u0022\u003EManage Webhooks\u003C/h2\u003E\u003Cp\u003ETo manage webhooks navigate to\u0026nbsp;\u003Ccode class=\u0022inline-code\u0022\u003EAccount Settings \u0026gt; Developer \u0026gt; Webhooks\u003C/code\u003E:\u003C/p\u003E\u003Cimg class=\u0022lazy-load\u0022 data-width=\u00221451\u0022 data-height=\u0022907\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/542e5f51-33cf-401f-aebe-4324ebe36fe4/5651e99c-f415-4489-a2d9-8ac1fb1401fc.png?v=1284257001\u0022 style=\u0022\u0022 alt=\u0022\u0022/\u003E\u003Ch3 id=\u0022test_a_webhook\u0022\u003ETest a Webhook\u003C/h3\u003E\u003Cp\u003EIn the manage webhooks screen you can also test your webhook.\u003C/p\u003E\u003Ch2 id=\u0022delivery_and_retries\u0022\u003EDelivery and Retries\u003C/h2\u003E\u003Cp\u003EDailyStory tracks delivery failures per webhook subscription. If a webhook returns a non-2xx HTTP response or cannot be reached for \u003Cb\u003E10 consecutive attempts\u003C/b\u003E, the subscription is automatically paused. Paused webhooks stop receiving events until an administrator clicks \u003Cb\u003EActivate\u003C/b\u003E on the Manage Webhooks page, which also resets the failure counter. Individual failures (HTTP status and response body, or exception message) are captured in the Webhook Failure Log under \u003Ccode class=\u0022inline-code\u0022\u003EAdmin \u0026gt; Logs and Tools\u003C/code\u003E for diagnostic purposes.\u003C/p\u003E\u003Ch2 id=\u0022manage_webhooks_using_rest_api\u0022\u003EManage Webhooks using REST API\u003C/h2\u003E\u003Cp\u003ESubscribe and unsubscribe to webhooks using the\u0026nbsp;\u003Ca target=\u0022_self\u0022 href=\u0022https://dev.dailystory.com/reference/event-subscribe#/\u0022\u003ESubscription API\u003C/a\u003E.\u003C/p\u003E\u003Ch2 id=\u0022supported_webhook_events\u0022\u003ESupported Webhook Events\u003C/h2\u003E\u003Cp\u003EBelow are the webhook events supported by DailyStory:\u003C/p\u003E\u003Ch3 id=\u0022contact_created_or_updated\u0022\u003EContact Created or Updated\u003C/h3\u003E\u003Cp\u003EReturns the full serialized contact (\u003Ca target=\u0022_self\u0022 href=\u0022https://dev.dailystory.com/reference/get-a-contact-1\u0022\u003Esee contact object\u003C/a\u003E).\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;contact\u0026quot;: { /* full serialized contact - see contact object */ }\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022contact_create_or_update_failed\u0022\u003EContact Create or Update Failed\u003C/h3\u003E\u003Cp\u003EThis webhook is called when the creation or update of a contact fails. The body of this webhook will contain 2 objects. The serialized exception and the original object that was received.\u003C/p\u003E\u003Ccite class=\u0022important\u0022\u003E\u003Cspan class=\u0022title\u0022\u003EImportant\u003C/span\u003E\u003Cp\u003EThis webhook is only available for specific integrations that utilize webhooks for contact creation/update.\u003C/p\u003E\u003C/cite\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;exception\u0026quot;: [exception details],\n    \u0026quot;payload\u0026quot;: [serialized version of update object]\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022lead_created\u0022\u003ELead Created\u003C/h3\u003E\u003Cp\u003EWhen a new lead is created.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\r\n  \u0026quot;id\u0026quot;:[numeric id of the lead],\r\n  \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;\r\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022lead_status_changed\u0022\u003ELead Status Changed\u003C/h3\u003E\u003Cp\u003EWhen the status of a lead is changed.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{ \n    \u0026quot;id\u0026quot;:[numeric id of the lead], \n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;status\u0026quot;:\u0026quot;[status changed to, e.g. Deleted ]\u0026quot; \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022contact_status_changed\u0022\u003EContact Status Changed\u003C/h3\u003E\u003Cp\u003EWhen the status of a contact is changed.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;status\u0026quot;:\u0026quot;[status changed to, e.g. Deleted ]\u0026quot; \n    \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022url_shortener_clicked\u0022\u003EURL Shortener Clicked\u003C/h3\u003E\u003Cp\u003EWhen a URL Shortener is clicked.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;id\u0026quot;:\u0026quot;unique id of the link\u0026quot;\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022text_message_reply_received\u0022\u003EText Message Reply Received\u003C/h3\u003E\u003Cp\u003EWhen a contact replies to a text message.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;mobile\u0026quot;:\u0026quot;[mobile number that replied]\u0026quot;, \n    \u0026quot;message\u0026quot;:\u0026quot;[received reply]\u0026quot;\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022email_address_bounced\u0022\u003EEmail Address Bounced\u003C/h3\u003E\u003Cp\u003EWhen an email address used to send an email bounces\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;email\u0026quot;:\u0026quot;[email address that bounced]\u0026quot;, \n    \u0026quot;date\u0026quot;:\u0026quot;[date/time when email bounced]\u0026quot;, \n    \u0026quot;messageid\u0026quot;:\u0026quot;[unique email message id of the email that bounced]\u0026quot;, \n    \u0026quot;is_spam_complaint\u0026quot;:\u0026quot;[bool indicating if the bounce is due to a spam complaint]\u0026quot;, \n    \u0026quot;reason\u0026quot;:\u0026quot;Permanent Delivery Failure - Address not deliverable\u0026quot; \n}\u003C/div\u003E\u003C/div\u003E\u003Cp\u003EThe comment of the response will contain additional details for the reason the email address bounced. If a recipient marks the email as SPAM (complaint) this will also trigger this webhook.\u003C/p\u003E\u003Ch3 id=\u0022email_opened\u0022\u003EEmail Opened\u003C/h3\u003E\u003Cp\u003EWhen a contact opens a tracked email sent from DailyStory.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;,\n    \u0026quot;emailid\u0026quot;:[numeric id of the email],\n    \u0026quot;date\u0026quot;:\u0026quot;[date/time when the email was opened]\u0026quot;\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022email_clicked\u0022\u003EEmail Clicked\u003C/h3\u003E\u003Cp\u003EWhen a contact clicks a tracked link in an email sent from DailyStory.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;,\n    \u0026quot;emailid\u0026quot;:[numeric id of the email],\n    \u0026quot;date\u0026quot;:\u0026quot;[date/time when the link was clicked]\u0026quot;,\n    \u0026quot;url\u0026quot;:\u0026quot;[url that was clicked]\u0026quot;\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022opted_out_of_email\u0022\u003EOpted out of Email\u003C/h3\u003E\u003Cp\u003EWhen a contact opts out of email.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;email\u0026quot;:\u0026quot;[email address that opted out]\u0026quot;\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022opted_out_of_text_messaging\u0022\u003EOpted out of Text Messaging\u003C/h3\u003E\u003Cp\u003EWhen a contact opts out of text messaging.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;mobile\u0026quot;:\u0026quot;[mobile number that opted out]\u0026quot; \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022opted_out_of_phone_calls\u0022\u003EOpted out of Phone Calls\u003C/h3\u003E\u003Cp\u003EWhen a contact opts out of phone calls.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022opted_in_to_email\u0022\u003EOpted in to Email\u003C/h3\u003E\u003Cp\u003EWhen a contact opts in to email.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;email\u0026quot;:\u0026quot;[email address that opted in]\u0026quot; \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022opted_in_to_phone_calls\u0022\u003EOpted in to Phone Calls\u003C/h3\u003E\u003Cp\u003EWhen a contact opts in to phone calls.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot; \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022opted_in_to_text_messaging\u0022\u003EOpted in to Text Messaging\u003C/h3\u003E\u003Cp\u003EWhen a contact opts in to text messaging.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot;, \n    \u0026quot;mobile\u0026quot;:\u0026quot;[mobile number that opted in]\u0026quot; \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022web_form_submitted\u0022\u003EWeb Form Submitted\u003C/h3\u003E\u003Cp\u003EWhen a web form is submitted.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{ \n    \u0026quot;webform_id\u0026quot;:\u0026quot;[id of the web form]\u0026quot;, \n    \u0026quot;webform_name\u0026quot;:\u0026quot;[name of the web form]\u0026quot;, \n    \u0026quot;lead_id\u0026quot;:[numeric id of the lead], \n    \u0026quot;dsid\u0026quot;:\u0026quot;[unique id of the contact]\u0026quot; \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022segment_created\u0022\u003ESegment Created\u003C/h3\u003E\u003Cp\u003EWhen a new segment is created.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n    \u0026quot;id\u0026quot;:\u0026quot;[id of the segment]\u0026quot;, \n    \u0026quot;name\u0026quot;:\u0026quot;[name of the semgnet]\u0026quot;, \n    \u0026quot;description\u0026quot;:\u0026quot;[description of the segment]\u0026quot;, \n    \u0026quot;segment_type\u0026quot;:\u0026quot;[type of segment]\u0026quot;, \n    \u0026quot;is_call_list\u0026quot;:[true/false] \n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022segment_updated\u0022\u003ESegment Updated\u003C/h3\u003E\u003Cp\u003EWhen a segment is updated.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{ \n    \u0026quot;id\u0026quot;:\u0026quot;[id of the segment]\u0026quot;, \n    \u0026quot;name\u0026quot;:\u0026quot;[name of the semgnet]\u0026quot;, \n    \u0026quot;status\u0026quot;:\u0026quot;[status of the segment]\u0026quot;,\n    \u0026quot;description\u0026quot;:\u0026quot;[description of the segment]\u0026quot;, \n    \u0026quot;segment_type\u0026quot;:\u0026quot;[type of segment]\u0026quot;, \n    \u0026quot;is_call_list\u0026quot;:[true/false] \n}\u003C/div\u003E\u003C/div\u003E\u003Cp\u003ESee\u0026nbsp;\u003Ca target=\u0022_self\u0022 href=\u0022/article/status\u0022\u003Estatus\u003C/a\u003E\u0026nbsp;for details on the values for the status.\u003C/p\u003E\u003Ch3 id=\u0022user_created\u0022\u003EUser Created\u003C/h3\u003E\u003Cp\u003EWhen a new DailyStory user is created (a user is an account that can login to the DailyStory tenant).\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{ \n    \u0026quot;email\u0026quot;:\u0026quot;[email address of the user created]\u0026quot;, \n    \u0026quot;useruid\u0026quot;:\u0026quot;[the unique id of the user]\u0026quot; }\n}\u003C/div\u003E\u003C/div\u003E","publish_status":0,"post_type":"Article","authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d","author":{"authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d"},"featured_image_updating":false,"meta_description":"Learn how to manage, test, and subscribe to DailyStory webhooks. View supported webhook events, REST API usage, and JSON payload samples.","display_toc":true,"has_workingcopy":false,"allow_indexing":true,"sort_order":4,"total_views":1614,"date_published":"2025-09-24T14:57:00","date_updated":"2026-04-23T15:17:49.8","date_created":"2025-09-24T14:45:23.837"}}}