{"_id":"55703aefcc189a21001ab2a3","__v":24,"category":{"_id":"551546edbc466623002afe72","pages":["551549c0bc466623002afe76","55154afbc859ac2f0001b486","55154daec859ac2f0001b48b","55154f36bc466623002afe7c","551550c5e68daa2f00cff84c","551551d4f854a31900368737","551552e7c859ac2f0001b494","551be4e3a0ee622b0087f69e","5527acc447b71d0d0044e6cd","552f84ad633a5b0d00e99daf","5537533df162750d00bbf7d0","554b3ffd6b448d0d00646d79","55506416fa289c0d0075e4f0","5550aaea00420e0d00d13113","55545865b450630d00041d80","55546906f9a7871700ef8e3c","555c4bf87e271d0d00f3c8c4","5564318c1fa8002300ea4bb0","556ffbd5910c090d00c432b6","557019f4cc189a21001ab258","55703aefcc189a21001ab2a3","5575a3c60b81dc230069c910","558ab69575eaf50d004e4cf3","55b0b41fb3171b3700b1539a","55ba2e48d72d1e1900276ac1","55ba45c804775a2f00628101","55c0b789344dc40d00f55933","55c0b8c837298d0d00088d88","55c0c095344dc40d00f55960","55d43e05b49ab11900328e2e","55d72c8c60fc730d00fc2738","55e6c564d678ad17001589ac","55e9b7780c9b420d0042b275","55f7cf2de32e9b0d00a2d4b6","56094efea7b2590d0089eb95","5613cdbeecbebc21003fa179","5613d8de6a092921004c30b8","5613de7c443514170060dbb6","5613e02823ecf6350009eefc","5613e4271db46e2100e142ad","5614d73c8113d20d00082e3e","561e11ae50e0a62100955946","561e2008efcf8217003adf77","5620f184b244890d001868e0","5620feb740e2c30d0002a899","562105ce40e2c30d0002a8a3","56210b3340e2c30d0002a8b3","56210c74b244890d0018690e","56249a0372ac510d00e49149","56249df185a31117001c53de","56249f0c85a31117001c53e1","5624a9e7c4bf501700bc5ec8","5624b29806e8040d005ed6a0","562507435a86b42300946324","563877854bfb360d00a463c1","5639e0f91846790d0089529a","565327d17d29410d004a0835","565457df04feff210074b17d","56545821ec189235002967af","565485099c4c6d0d00aeda02","5666f1f1f672550d000851ad","566abc7b74d574170070b700","566ad3c7c7c3cd1700265d14","566aede7b5ccc20d00817f71","566aef3147ebaf1900fe65d6"],"project":"54eb50e5615ffc1900305a16","version":"54eb63b859b1172100334fae","__v":65,"sync":{"url":"","isSync":false},"reference":true,"createdAt":"2015-03-27T12:02:53.314Z","from_sync":false,"order":11,"slug":"advanced-tutorials","title":"Advanced tutorials"},"parentDoc":null,"version":{"_id":"54eb63b859b1172100334fae","project":"54eb50e5615ffc1900305a16","forked_from":"54eb63a1867e1917009b711d","__v":27,"createdAt":"2015-02-23T17:30:32.501Z","releaseDate":"2015-02-23T17:30:32.501Z","categories":["54eb63b959b1172100334faf","54eb63b959b1172100334fb0","54eb63b959b1172100334fb1","54eb63b959b1172100334fb2","54ed8dd4ab373e2300f50eae","54ed99b2ab373e2300f50ede","55153a6de68daa2f00cff838","551546edbc466623002afe72","5515472ac28d6125001b8884","55154749c28d6125001b8885","555d9b4106dfec0d00d38ea7","5613e06e433e5735007c7708","5624bbb785a31117001c5403","56669e857cc81e0d00253f8e","568b8d837a42220d00498311","56a632277ef6620d00e2f18a","56d8147c3eb4dd0b00201aac","57a9ce2fac6db30e000d7efd","57a9cf4e944ea60e00dc3f74","58172386715dce0f00da4aa0","582dc59ee1b8692300c0dd03","589b19b4fec2730f0082e040","58b04a023529383900a759b5","58b92d1598157a0f004869bf","592e7685c58275000f20174f","59392839e376d4002f8a0474","59393064e376d4002f8a05a1","5947ae0d4005e2000f3a4fec","594a74df1d1de5001ab3517a","5954bc387a147f001b918915"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1"},"project":"54eb50e5615ffc1900305a16","user":"54eb4fdedf7add210007b29b","updates":["58416a36426cf70f006f507d"],"next":{"pages":[],"description":""},"createdAt":"2015-06-04T11:47:59.429Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":true,"order":16,"body":"Unlike the [Getting delivery reports](doc:sms-delivery-reports) API method, where the reports are pulled and received in the response, you are able to set a **Notify URL** on your callback server on which we will push the delivery reports. \n\nNotify URL is set as one of the parameters of the [Fully featured textual message](doc:fully-featured-textual-message) API method.\n\nAs soon as delivery reports for sent messages are received in the Infobip system, they will be forwarded to specified Notify URL on your callback server. Besides the Notify URL, you can also specify a **notify content type** for delivery reports.\n\nSupported content types:\n- **`application/json`**\n- **`application/xml`**\n\nFor every sent message you can set customized [bulk id and message id](doc:bulk-id-and-message-id) so each delivery report pushed on the Notify URL will have the same `messageId` and `bulkId` attributes as the message for which it is being sent. If you don't use customized `messageId` and `bulkId`, these attributes of pushed delivery reports will be generated by the Infobip system.\n\nApart from custom [bulk id and message id](doc:bulk-id-and-message-id) that can identify sent messages, you are able to set a **`callbackData`** as an additional, user defined data that will be sent on the Notify URL. Callback data is also set as one of the parameters of the [Fully featured textual message](doc:fully-featured-textual-message) API method.\n\nThe example bellow shows how to set `notifyURL`, `notifyContentType` for delivery report and the user's `callbackData`.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /sms/1/text/advanced HTTP/1.1\\nHost: api.infobip.com\\nAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\\nContent-Type: application/json\\n\\n{\\n   \\\"bulkId\\\":\\\"BULK-ID-123-xyz\\\",\\n   \\\"messages\\\":[\\n      {\\n         \\\"from\\\":\\\"InfoSMS\\\",\\n         \\\"destinations\\\":[\\n            {\\n               \\\"to\\\":\\\"41793026727\\\",\\n               \\\"messageId\\\":\\\"MESSAGE-ID-123-xyz\\\"\\n            },\\n            {\\n               \\\"to\\\":\\\"41793026731\\\"\\n            }\\n         ],\\n         \\\"text\\\":\\\"Mama always said life was like a box of chocolates. You never know what you're gonna get.\\\",\\n         \\\"notifyUrl\\\":\\\"http://www.example.com/sms/advanced\\\",\\n         \\\"notifyContentType\\\":\\\"application/json\\\",\\n         \\\"callbackData\\\":\\\"There's no place like home.\\\"\\n      }\\n\\t\\t]\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nThe results you will receive on your Notify URL will be the same as [Getting delivery reports](doc:sms-delivery-reports) over API method, except XML root element name which is same for all reports - `<reportResponse>`.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"results\\\": [\\n    {\\n      \\\"bulkId\\\": \\\"BULK-ID-123-xyz\\\",\\n      \\\"messageId\\\": \\\"c9823180-94d4-4ea0-9bf3-ec907e7534a6\\\",\\n      \\\"to\\\": \\\"41793026731\\\",\\n      \\\"sentAt\\\": \\\"2015-06-04T13:01:52.933+0000\\\",\\n      \\\"doneAt\\\": \\\"2015-06-04T13:02:00.134+0000\\\",\\n      \\\"smsCount\\\": 1,\\n      \\\"price\\\": {\\n        \\\"pricePerMessage\\\": 0.0001000000,\\n        \\\"currency\\\": \\\"EUR\\\"\\n      },\\n      \\\"status\\\": {\\n        \\\"groupId\\\": 3,\\n        \\\"groupName\\\": \\\"DELIVERED\\\",\\n        \\\"id\\\": 5,\\n        \\\"name\\\": \\\"DELIVERED_TO_HANDSET\\\",\\n        \\\"description\\\": \\\"Message delivered to handset\\\"\\n      },\\n      \\\"error\\\": {\\n        \\\"groupId\\\": 0,\\n        \\\"groupName\\\": \\\"OK\\\",\\n        \\\"id\\\": 0,\\n        \\\"name\\\": \\\"NO_ERROR\\\",\\n        \\\"description\\\": \\\"No Error\\\",\\n        \\\"permanent\\\": false\\n      },\\n      \\\"callbackData\\\":\\\"There's no place like home.\\\"\\n    },\\n    {\\n      \\\"bulkId\\\": \\\"BULK-ID-123-xyz\\\",\\n      \\\"messageId\\\": \\\"MESSAGE-ID-123-xyz\\\",\\n      \\\"to\\\": \\\"41793026727\\\",\\n      \\\"sentAt\\\": \\\"2015-06-04T13:01:52.937+0000\\\",\\n      \\\"doneAt\\\": \\\"2015-06-04T13:02:01.204+0000\\\",\\n      \\\"smsCount\\\": 1,\\n      \\\"price\\\": {\\n        \\\"pricePerMessage\\\": 0.0001000000,\\n        \\\"currency\\\": \\\"EUR\\\"\\n      },\\n      \\\"status\\\": {\\n        \\\"groupId\\\": 3,\\n        \\\"groupName\\\": \\\"DELIVERED\\\",\\n        \\\"id\\\": 5,\\n        \\\"name\\\": \\\"DELIVERED_TO_HANDSET\\\",\\n        \\\"description\\\": \\\"Message delivered to handset\\\"\\n      },\\n      \\\"error\\\": {\\n        \\\"groupId\\\": 0,\\n        \\\"groupName\\\": \\\"OK\\\",\\n        \\\"id\\\": 0,\\n        \\\"name\\\": \\\"NO_ERROR\\\",\\n        \\\"description\\\": \\\"No Error\\\",\\n        \\\"permanent\\\": false\\n      },\\n      \\\"callbackData\\\":\\\"There's no place like home.\\\"\\n    }\\n  ]\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n# Delivery report push retry cycle\n\nIf your Notify URL is unavailable for any reason, forward attempts will be made according to formula: `1min + (1min * <retryNumber/> * <retryNumber/>)`. Examples for first few retry attempts are shown in the table below. Maximum number of retries is 20, i.e. the last retry will be done 41:30h after the initial one. If your URL is not available for the entire time, delivery reports will be lost and the only way you'll be able to get them is by [Getting SMS logs](doc:sms-logs).\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Retry number\",\n    \"h-1\": \"Interval\",\n    \"h-2\": \"Cumulative\",\n    \"0-0\": \"**0**\",\n    \"0-1\": \"01min\",\n    \"0-2\": \"00:01h\",\n    \"1-0\": \"**1**\",\n    \"1-1\": \"02min\",\n    \"1-2\": \"00:03h\",\n    \"2-0\": \"**2**\",\n    \"2-1\": \"05min\",\n    \"2-2\": \"00:08h\",\n    \"3-0\": \"**3**\",\n    \"3-1\": \"10min\",\n    \"3-2\": \"00:18h\",\n    \"4-0\": \"**4**\",\n    \"5-0\": \"**5**\",\n    \"4-1\": \"17min\",\n    \"5-1\": \"26min\",\n    \"6-1\": \"37min\",\n    \"4-2\": \"00:35h\",\n    \"5-2\": \"01:01h\",\n    \"6-2\": \"01:38h\",\n    \"6-0\": \"**6**\"\n  },\n  \"cols\": 3,\n  \"rows\": 7\n}\n[/block]\n# Delivery report sender IP addresses\n\nIn case you need to white-list our IPs on you system, here is the list of addresses we are using to deliver incoming messages and delivery reports.\n\n* 193.105.74.58\n* 149.5.186.4\n* 197.157.66.28\n* 89.249.23.130\n* 180.179.146.68\n\n-----------\n#### **Tip:** Find out the difference between [Delivery reports and Message logs](doc:logs-vs-delivery-reports).","excerpt":"Receive a Delivery reports and custom data on your callback server's Notify URL.","slug":"notify-url","type":"basic","title":"Delivery reports on Notify URL"}

Delivery reports on Notify URL

Receive a Delivery reports and custom data on your callback server's Notify URL.

Unlike the [Getting delivery reports](doc:sms-delivery-reports) API method, where the reports are pulled and received in the response, you are able to set a **Notify URL** on your callback server on which we will push the delivery reports. Notify URL is set as one of the parameters of the [Fully featured textual message](doc:fully-featured-textual-message) API method. As soon as delivery reports for sent messages are received in the Infobip system, they will be forwarded to specified Notify URL on your callback server. Besides the Notify URL, you can also specify a **notify content type** for delivery reports. Supported content types: - **`application/json`** - **`application/xml`** For every sent message you can set customized [bulk id and message id](doc:bulk-id-and-message-id) so each delivery report pushed on the Notify URL will have the same `messageId` and `bulkId` attributes as the message for which it is being sent. If you don't use customized `messageId` and `bulkId`, these attributes of pushed delivery reports will be generated by the Infobip system. Apart from custom [bulk id and message id](doc:bulk-id-and-message-id) that can identify sent messages, you are able to set a **`callbackData`** as an additional, user defined data that will be sent on the Notify URL. Callback data is also set as one of the parameters of the [Fully featured textual message](doc:fully-featured-textual-message) API method. The example bellow shows how to set `notifyURL`, `notifyContentType` for delivery report and the user's `callbackData`. [block:code] { "codes": [ { "code": "POST /sms/1/text/advanced HTTP/1.1\nHost: api.infobip.com\nAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\nContent-Type: application/json\n\n{\n \"bulkId\":\"BULK-ID-123-xyz\",\n \"messages\":[\n {\n \"from\":\"InfoSMS\",\n \"destinations\":[\n {\n \"to\":\"41793026727\",\n \"messageId\":\"MESSAGE-ID-123-xyz\"\n },\n {\n \"to\":\"41793026731\"\n }\n ],\n \"text\":\"Mama always said life was like a box of chocolates. You never know what you're gonna get.\",\n \"notifyUrl\":\"http://www.example.com/sms/advanced\",\n \"notifyContentType\":\"application/json\",\n \"callbackData\":\"There's no place like home.\"\n }\n\t\t]\n}", "language": "json" } ] } [/block] The results you will receive on your Notify URL will be the same as [Getting delivery reports](doc:sms-delivery-reports) over API method, except XML root element name which is same for all reports - `<reportResponse>`. [block:code] { "codes": [ { "code": "{\n \"results\": [\n {\n \"bulkId\": \"BULK-ID-123-xyz\",\n \"messageId\": \"c9823180-94d4-4ea0-9bf3-ec907e7534a6\",\n \"to\": \"41793026731\",\n \"sentAt\": \"2015-06-04T13:01:52.933+0000\",\n \"doneAt\": \"2015-06-04T13:02:00.134+0000\",\n \"smsCount\": 1,\n \"price\": {\n \"pricePerMessage\": 0.0001000000,\n \"currency\": \"EUR\"\n },\n \"status\": {\n \"groupId\": 3,\n \"groupName\": \"DELIVERED\",\n \"id\": 5,\n \"name\": \"DELIVERED_TO_HANDSET\",\n \"description\": \"Message delivered to handset\"\n },\n \"error\": {\n \"groupId\": 0,\n \"groupName\": \"OK\",\n \"id\": 0,\n \"name\": \"NO_ERROR\",\n \"description\": \"No Error\",\n \"permanent\": false\n },\n \"callbackData\":\"There's no place like home.\"\n },\n {\n \"bulkId\": \"BULK-ID-123-xyz\",\n \"messageId\": \"MESSAGE-ID-123-xyz\",\n \"to\": \"41793026727\",\n \"sentAt\": \"2015-06-04T13:01:52.937+0000\",\n \"doneAt\": \"2015-06-04T13:02:01.204+0000\",\n \"smsCount\": 1,\n \"price\": {\n \"pricePerMessage\": 0.0001000000,\n \"currency\": \"EUR\"\n },\n \"status\": {\n \"groupId\": 3,\n \"groupName\": \"DELIVERED\",\n \"id\": 5,\n \"name\": \"DELIVERED_TO_HANDSET\",\n \"description\": \"Message delivered to handset\"\n },\n \"error\": {\n \"groupId\": 0,\n \"groupName\": \"OK\",\n \"id\": 0,\n \"name\": \"NO_ERROR\",\n \"description\": \"No Error\",\n \"permanent\": false\n },\n \"callbackData\":\"There's no place like home.\"\n }\n ]\n}", "language": "json" } ] } [/block] # Delivery report push retry cycle If your Notify URL is unavailable for any reason, forward attempts will be made according to formula: `1min + (1min * <retryNumber/> * <retryNumber/>)`. Examples for first few retry attempts are shown in the table below. Maximum number of retries is 20, i.e. the last retry will be done 41:30h after the initial one. If your URL is not available for the entire time, delivery reports will be lost and the only way you'll be able to get them is by [Getting SMS logs](doc:sms-logs). [block:parameters] { "data": { "h-0": "Retry number", "h-1": "Interval", "h-2": "Cumulative", "0-0": "**0**", "0-1": "01min", "0-2": "00:01h", "1-0": "**1**", "1-1": "02min", "1-2": "00:03h", "2-0": "**2**", "2-1": "05min", "2-2": "00:08h", "3-0": "**3**", "3-1": "10min", "3-2": "00:18h", "4-0": "**4**", "5-0": "**5**", "4-1": "17min", "5-1": "26min", "6-1": "37min", "4-2": "00:35h", "5-2": "01:01h", "6-2": "01:38h", "6-0": "**6**" }, "cols": 3, "rows": 7 } [/block] # Delivery report sender IP addresses In case you need to white-list our IPs on you system, here is the list of addresses we are using to deliver incoming messages and delivery reports. * 193.105.74.58 * 149.5.186.4 * 197.157.66.28 * 89.249.23.130 * 180.179.146.68 ----------- #### **Tip:** Find out the difference between [Delivery reports and Message logs](doc:logs-vs-delivery-reports).