{"_id":"551552e7c859ac2f0001b494","version":{"_id":"54eb63b859b1172100334fae","project":"54eb50e5615ffc1900305a16","forked_from":"54eb63a1867e1917009b711d","__v":26,"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"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1"},"__v":13,"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,"project":"54eb50e5615ffc1900305a16","user":"54eb4fdedf7add210007b29b","updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-03-27T12:53:59.307Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":true,"order":25,"body":"Number Lookup provides information about phone numbers in your database. There are two ways of getting that information: \n\n - **Sync**\n - **Async** \n\nIf an API call is **synchronous**, it means that Number Lookup will be done before your application receives response from API call. In turn, this means application code should properly handle waiting for HTTP response so users don't perceive waiting for NC lookup response as latency or performance lag inside your app.\n\nMaking a synchronous API call can be beneficial if there is a code in your app that will only execute properly once the API response is received.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /number/1/query HTTP/1.1\\nHost: api.infobip.com\\nAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\\nContent-Type: application/json\\n\\n{  \\n   \\\"to\\\":[  \\n      \\\"41793026727\\\",\\n      \\\"41793026728\\\",\\n      \\\"41793026729\\\"\\n   ]\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nThe Number Lookup result will be received directly in the response:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 200 OK\\nContent-Type: application/json\\n\\n{  \\n   \\\"results\\\":[  \\n      {  \\n         \\\"to\\\":\\\"41793026727\\\",\\n         \\\"mccMnc\\\":\\\"22801\\\",\\n         \\\"originalNetwork\\\":{  \\n            \\\"networkPrefix\\\":\\\"79\\\",\\n            \\\"countryPrefix\\\":\\\"41\\\"\\n         },\\n         \\\"ported\\\":false,\\n         \\\"roaming\\\":false,\\n         \\\"status\\\":{  \\n            \\\"groupId\\\":2,\\n            \\\"groupName\\\":\\\"UNDELIVERABLE\\\",\\n            \\\"id\\\":9,\\n            \\\"name\\\":\\\"UNDELIVERABLE_NOT_DELIVERED\\\",\\n            \\\"description\\\":\\\"Message sent not delivered\\\"\\n         },\\n         \\\"error\\\":{  \\n            \\\"groupId\\\":1,\\n            \\\"groupName\\\":\\\"HANDSET_ERRORS\\\",\\n            \\\"id\\\":27,\\n            \\\"name\\\":\\\"EC_ABSENT_SUBSCRIBER\\\",\\n            \\\"description\\\":\\\"Absent Subscriber\\\",\\n            \\\"permanent\\\":false\\n         }\\n      }\\n   ]\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n**Asynchronous** calls do not wait for the Number Lookup to be done before API call response is returned. When Number Lookup is done, a \"callback\" function is executed and Number Lookup information is sent to the `notifyUrl` you specified in the request.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /number/1/notify HTTP/1.1\\nHost: api.infobip.com\\nAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\\nContent-Type: application/json\\n\\n{  \\n   \\\"to\\\":[  \\n      \\\"41793026727\\\",\\n      \\\"41793026728\\\",\\n      \\\"41793026729\\\"\\n   ],\\n   \\\"notifyUrl\\\":\\\"http://example.com/notifyUrl\\\",\\n   \\\"notifyContentType\\\":\\\"application/json\\\"\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n-----------\n#### **Tip:** For detailed information about Number Lookup history, check out [Sent lookups logs](doc:sent-lookup-logs) .","excerpt":"Sync vs. Async Number Lookup","slug":"number-context-sync-vs-async","type":"basic","title":"Number Lookup: Sync vs. Async"}

Number Lookup: Sync vs. Async

Sync vs. Async Number Lookup

Number Lookup provides information about phone numbers in your database. There are two ways of getting that information: - **Sync** - **Async** If an API call is **synchronous**, it means that Number Lookup will be done before your application receives response from API call. In turn, this means application code should properly handle waiting for HTTP response so users don't perceive waiting for NC lookup response as latency or performance lag inside your app. Making a synchronous API call can be beneficial if there is a code in your app that will only execute properly once the API response is received. [block:code] { "codes": [ { "code": "POST /number/1/query HTTP/1.1\nHost: api.infobip.com\nAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\nContent-Type: application/json\n\n{ \n \"to\":[ \n \"41793026727\",\n \"41793026728\",\n \"41793026729\"\n ]\n}", "language": "json" } ] } [/block] The Number Lookup result will be received directly in the response: [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{ \n \"results\":[ \n { \n \"to\":\"41793026727\",\n \"mccMnc\":\"22801\",\n \"originalNetwork\":{ \n \"networkPrefix\":\"79\",\n \"countryPrefix\":\"41\"\n },\n \"ported\":false,\n \"roaming\":false,\n \"status\":{ \n \"groupId\":2,\n \"groupName\":\"UNDELIVERABLE\",\n \"id\":9,\n \"name\":\"UNDELIVERABLE_NOT_DELIVERED\",\n \"description\":\"Message sent not delivered\"\n },\n \"error\":{ \n \"groupId\":1,\n \"groupName\":\"HANDSET_ERRORS\",\n \"id\":27,\n \"name\":\"EC_ABSENT_SUBSCRIBER\",\n \"description\":\"Absent Subscriber\",\n \"permanent\":false\n }\n }\n ]\n}", "language": "json" } ] } [/block] **Asynchronous** calls do not wait for the Number Lookup to be done before API call response is returned. When Number Lookup is done, a "callback" function is executed and Number Lookup information is sent to the `notifyUrl` you specified in the request. [block:code] { "codes": [ { "code": "POST /number/1/notify HTTP/1.1\nHost: api.infobip.com\nAuthorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==\nContent-Type: application/json\n\n{ \n \"to\":[ \n \"41793026727\",\n \"41793026728\",\n \"41793026729\"\n ],\n \"notifyUrl\":\"http://example.com/notifyUrl\",\n \"notifyContentType\":\"application/json\"\n}", "language": "json" } ] } [/block] ----------- #### **Tip:** For detailed information about Number Lookup history, check out [Sent lookups logs](doc:sent-lookup-logs) .