[{"data":1,"prerenderedAt":1400},["ShallowReactive",2],{"docs-page:\u002Fdocs\u002Fwebhooks\u002Finbound-sms":3,"docs-navigation":1032,"docs-surround:\u002Fdocs\u002Fwebhooks\u002Finbound-sms":1173,"icon:building-bank":1178,"icon:building-store":1204,"icon:chart-bar":1219,"icon:chart-pie":1232,"icon:code":1239,"icon:discount":1249,"icon:heart-handshake":1263,"icon:mail-forward":1276,"icon:messages":1289,"icon:microphone-2":1296,"icon:photo":1303,"icon:plug-connected":1316,"icon:school":1335,"icon:speakerphone":1342,"icon:stethoscope":1352,"icon:trophy":1368,"icon:user-plus":1387},{"id":4,"title":5,"body":6,"description":1021,"extension":1022,"group":1023,"meta":1024,"navTitle":1023,"navigation":230,"path":1025,"rawbody":1026,"seo":1027,"status":1028,"stem":1029,"updated":1030,"__hash__":1031},"docs\u002Fdocs\u002F08.webhooks\u002F02.inbound-sms.md","Inbound SMS",{"type":7,"value":8,"toc":1016},"minimark",[9,13,22,27,32,35,82,106,110,983,987,1004,1012],[10,11,12],"p",{},"When someone texts your short code, Wire2Air receives the message from the carrier, works out which customer it belongs to from the short code and keyword, and calls your URL.",[14,15,19],"endpoint",{"auth":16,"method":17,"url":18},"none","GET","https:\u002F\u002Fyour-server.example\u002Fwire2air\u002Finbound-sms",[10,20,21],{},"Your URL. Wire2Air appends the parameters below as a query string.",[23,24,26],"h2",{"id":25},"parameters","Parameters",[28,29],"param-table",{":params":30,"id":31},"[{\"name\":\"MobileNumber\",\"in\":\"query\",\"type\":\"string\",\"required\":true,\"description\":\"The sender's mobile number.\"},{\"name\":\"Message\",\"in\":\"query\",\"type\":\"string\",\"required\":true,\"description\":\"The text the sender wrote.\"},{\"name\":\"Rcvd\",\"in\":\"query\",\"type\":\"string\",\"required\":true,\"example\":\"1-2-2015 02:18:30\",\"description\":\"When Wire2Air received the message.\"},{\"name\":\"shortcode\",\"in\":\"query\",\"type\":\"string\",\"required\":true,\"example\":\"27126\",\"description\":\"Your number the message was sent to.\"}]","param",[10,33,34],{},"An example request, URL-encoded:",[36,37,43],"pre",{"className":38,"code":39,"filename":40,"language":41,"meta":42,"style":42},"language-http shiki shiki-themes github-light-high-contrast github-dark-high-contrast","GET \u002Fwire2air\u002Finbound-sms?MobileNumber=12125551234&Message=Hello&Rcvd=1-2-2015%2002%3A18%3A30&shortcode=27126 HTTP\u002F1.1\nHost: your-server.example\n","Request from Wire2Air","http","",[44,45,46,68],"code",{"__ignoreMap":42},[47,48,51,54,58,61,64],"span",{"class":49,"line":50},"line",1,[47,52,17],{"class":53},"sHUrx",[47,55,57],{"class":56},"suds8"," \u002Fwire2air\u002Finbound-sms?MobileNumber=12125551234&Message=Hello&Rcvd=1-2-2015%2002%3A18%3A30&shortcode=27126 ",[47,59,60],{"class":53},"HTTP",[47,62,63],{"class":56},"\u002F",[47,65,67],{"class":66},"s-5SL","1.1\n",[47,69,71,75,78],{"class":49,"line":70},2,[47,72,74],{"class":73},"sne4z","Host",[47,76,77],{"class":53},":",[47,79,81],{"class":80},"sT6z2"," your-server.example\n",[83,84,87],"callout",{"question":85,"type":86},"OQ-25","pending",[10,88,89,90,93,94,97,98,101,102,105],{},"Not documented: the time zone and exact format of ",[44,91,92],{},"Rcvd",", how ",[44,95,96],{},"Message"," is encoded, and whether parameter names keep this exact case. The marketing page ",[44,99,100],{},"\u002Fdeveloper-apis\u002F"," described a different parameter, ",[44,103,104],{},"SMSINBOXID",", for the same webhook.",[23,107,109],{"id":108},"examples","Examples",[111,112,113,272,561,787],"code-group",{},[36,114,119],{"className":115,"code":116,"filename":117,"language":118,"meta":42,"style":42},"language-php shiki shiki-themes github-light-high-contrast github-dark-high-contrast","\u003C?php\n\u002F\u002F Read the values Wire2Air sends; validate them before you use them.\n$sender = $_GET['MobileNumber'] ?? '';\n$content = $_GET['Message'] ?? '';\n$shortCode = $_GET['shortcode'] ?? '';\n$received = $_GET['Rcvd'] ?? '';\n\n\u002F\u002F Store the message, then answer quickly.\nerror_log(sprintf('SMS from %s to %s at %s: %s', $sender, $shortCode, $received, $content));\nhttp_response_code(200);\n","PHP","php",[44,120,121,129,135,162,183,204,225,232,238,258],{"__ignoreMap":42},[47,122,123,126],{"class":49,"line":50},[47,124,125],{"class":53},"\u003C?",[47,127,128],{"class":66},"php\n",[47,130,131],{"class":49,"line":70},[47,132,134],{"class":133},"sLBg1","\u002F\u002F Read the values Wire2Air sends; validate them before you use them.\n",[47,136,138,141,144,147,150,153,156,159],{"class":49,"line":137},3,[47,139,140],{"class":56},"$sender ",[47,142,143],{"class":53},"=",[47,145,146],{"class":56}," $_GET[",[47,148,149],{"class":80},"'MobileNumber'",[47,151,152],{"class":56},"] ",[47,154,155],{"class":53},"??",[47,157,158],{"class":80}," ''",[47,160,161],{"class":56},";\n",[47,163,165,168,170,172,175,177,179,181],{"class":49,"line":164},4,[47,166,167],{"class":56},"$content ",[47,169,143],{"class":53},[47,171,146],{"class":56},[47,173,174],{"class":80},"'Message'",[47,176,152],{"class":56},[47,178,155],{"class":53},[47,180,158],{"class":80},[47,182,161],{"class":56},[47,184,186,189,191,193,196,198,200,202],{"class":49,"line":185},5,[47,187,188],{"class":56},"$shortCode ",[47,190,143],{"class":53},[47,192,146],{"class":56},[47,194,195],{"class":80},"'shortcode'",[47,197,152],{"class":56},[47,199,155],{"class":53},[47,201,158],{"class":80},[47,203,161],{"class":56},[47,205,207,210,212,214,217,219,221,223],{"class":49,"line":206},6,[47,208,209],{"class":56},"$received ",[47,211,143],{"class":53},[47,213,146],{"class":56},[47,215,216],{"class":80},"'Rcvd'",[47,218,152],{"class":56},[47,220,155],{"class":53},[47,222,158],{"class":80},[47,224,161],{"class":56},[47,226,228],{"class":49,"line":227},7,[47,229,231],{"emptyLinePlaceholder":230},true,"\n",[47,233,235],{"class":49,"line":234},8,[47,236,237],{"class":133},"\u002F\u002F Store the message, then answer quickly.\n",[47,239,241,244,247,250,252,255],{"class":49,"line":240},9,[47,242,243],{"class":66},"error_log",[47,245,246],{"class":56},"(",[47,248,249],{"class":66},"sprintf",[47,251,246],{"class":56},[47,253,254],{"class":80},"'SMS from %s to %s at %s: %s'",[47,256,257],{"class":56},", $sender, $shortCode, $received, $content));\n",[47,259,261,264,266,269],{"class":49,"line":260},10,[47,262,263],{"class":66},"http_response_code",[47,265,246],{"class":56},[47,267,268],{"class":66},"200",[47,270,271],{"class":56},");\n",[36,273,278],{"className":274,"code":275,"filename":276,"language":277,"meta":42,"style":42},"language-python shiki shiki-themes github-light-high-contrast github-dark-high-contrast","from http.server import BaseHTTPRequestHandler, HTTPServer\nfrom urllib.parse import parse_qs, urlparse\n\n\nclass InboundSms(BaseHTTPRequestHandler):\n    def do_GET(self):\n        params = parse_qs(urlparse(self.path).query)\n        sender = params.get(\"MobileNumber\", [\"\"])[0]\n        content = params.get(\"Message\", [\"\"])[0]\n        short_code = params.get(\"shortcode\", [\"\"])[0]\n        received = params.get(\"Rcvd\", [\"\"])[0]\n        print(f\"SMS from {sender} to {short_code} at {received}: {content}\")\n        self.send_response(200)\n        self.end_headers()\n\n\nHTTPServer((\"\", 8080), InboundSms).serve_forever()\n","Python 3","python",[44,279,280,294,306,310,314,331,343,359,387,409,431,454,513,526,534,539,544],{"__ignoreMap":42},[47,281,282,285,288,291],{"class":49,"line":50},[47,283,284],{"class":53},"from",[47,286,287],{"class":56}," http.server ",[47,289,290],{"class":53},"import",[47,292,293],{"class":56}," BaseHTTPRequestHandler, HTTPServer\n",[47,295,296,298,301,303],{"class":49,"line":70},[47,297,284],{"class":53},[47,299,300],{"class":56}," urllib.parse ",[47,302,290],{"class":53},[47,304,305],{"class":56}," parse_qs, urlparse\n",[47,307,308],{"class":49,"line":137},[47,309,231],{"emptyLinePlaceholder":230},[47,311,312],{"class":49,"line":164},[47,313,231],{"emptyLinePlaceholder":230},[47,315,316,319,323,325,328],{"class":49,"line":185},[47,317,318],{"class":53},"class",[47,320,322],{"class":321},"soyes"," InboundSms",[47,324,246],{"class":56},[47,326,327],{"class":66},"BaseHTTPRequestHandler",[47,329,330],{"class":56},"):\n",[47,332,333,336,340],{"class":49,"line":206},[47,334,335],{"class":53},"    def",[47,337,339],{"class":338},"sKwhi"," do_GET",[47,341,342],{"class":56},"(self):\n",[47,344,345,348,350,353,356],{"class":49,"line":227},[47,346,347],{"class":56},"        params ",[47,349,143],{"class":53},[47,351,352],{"class":56}," parse_qs(urlparse(",[47,354,355],{"class":66},"self",[47,357,358],{"class":56},".path).query)\n",[47,360,361,364,366,369,372,375,378,381,384],{"class":49,"line":234},[47,362,363],{"class":56},"        sender ",[47,365,143],{"class":53},[47,367,368],{"class":56}," params.get(",[47,370,371],{"class":80},"\"MobileNumber\"",[47,373,374],{"class":56},", [",[47,376,377],{"class":80},"\"\"",[47,379,380],{"class":56},"])[",[47,382,383],{"class":66},"0",[47,385,386],{"class":56},"]\n",[47,388,389,392,394,396,399,401,403,405,407],{"class":49,"line":240},[47,390,391],{"class":56},"        content ",[47,393,143],{"class":53},[47,395,368],{"class":56},[47,397,398],{"class":80},"\"Message\"",[47,400,374],{"class":56},[47,402,377],{"class":80},[47,404,380],{"class":56},[47,406,383],{"class":66},[47,408,386],{"class":56},[47,410,411,414,416,418,421,423,425,427,429],{"class":49,"line":260},[47,412,413],{"class":56},"        short_code ",[47,415,143],{"class":53},[47,417,368],{"class":56},[47,419,420],{"class":80},"\"shortcode\"",[47,422,374],{"class":56},[47,424,377],{"class":80},[47,426,380],{"class":56},[47,428,383],{"class":66},[47,430,386],{"class":56},[47,432,434,437,439,441,444,446,448,450,452],{"class":49,"line":433},11,[47,435,436],{"class":56},"        received ",[47,438,143],{"class":53},[47,440,368],{"class":56},[47,442,443],{"class":80},"\"Rcvd\"",[47,445,374],{"class":56},[47,447,377],{"class":80},[47,449,380],{"class":56},[47,451,383],{"class":66},[47,453,386],{"class":56},[47,455,457,460,462,465,468,471,474,477,480,482,485,487,490,492,495,497,500,502,505,507,510],{"class":49,"line":456},12,[47,458,459],{"class":66},"        print",[47,461,246],{"class":56},[47,463,464],{"class":53},"f",[47,466,467],{"class":80},"\"SMS from ",[47,469,470],{"class":53},"{",[47,472,473],{"class":56},"sender",[47,475,476],{"class":53},"}",[47,478,479],{"class":80}," to ",[47,481,470],{"class":53},[47,483,484],{"class":56},"short_code",[47,486,476],{"class":53},[47,488,489],{"class":80}," at ",[47,491,470],{"class":53},[47,493,494],{"class":56},"received",[47,496,476],{"class":53},[47,498,499],{"class":80},": ",[47,501,470],{"class":53},[47,503,504],{"class":56},"content",[47,506,476],{"class":53},[47,508,509],{"class":80},"\"",[47,511,512],{"class":56},")\n",[47,514,516,519,522,524],{"class":49,"line":515},13,[47,517,518],{"class":66},"        self",[47,520,521],{"class":56},".send_response(",[47,523,268],{"class":66},[47,525,512],{"class":56},[47,527,529,531],{"class":49,"line":528},14,[47,530,518],{"class":66},[47,532,533],{"class":56},".end_headers()\n",[47,535,537],{"class":49,"line":536},15,[47,538,231],{"emptyLinePlaceholder":230},[47,540,542],{"class":49,"line":541},16,[47,543,231],{"emptyLinePlaceholder":230},[47,545,547,550,552,555,558],{"class":49,"line":546},17,[47,548,549],{"class":56},"HTTPServer((",[47,551,377],{"class":80},[47,553,554],{"class":56},", ",[47,556,557],{"class":66},"8080",[47,559,560],{"class":56},"), InboundSms).serve_forever()\n",[36,562,567],{"className":563,"code":564,"filename":565,"language":566,"meta":42,"style":42},"language-javascript shiki shiki-themes github-light-high-contrast github-dark-high-contrast","import { createServer } from \"node:http\";\n\ncreateServer((req, res) => {\n  const params = new URL(req.url, \"http:\u002F\u002Flocalhost\").searchParams;\n  const sender = params.get(\"MobileNumber\");\n  const content = params.get(\"Message\");\n  const shortCode = params.get(\"shortcode\");\n  const received = params.get(\"Rcvd\");\n  console.log(`SMS from ${sender} to ${shortCode} at ${received}: ${content}`);\n  res.writeHead(200).end();\n}).listen(8080);\n","Node","javascript",[44,568,569,583,587,612,638,659,678,697,716,752,773],{"__ignoreMap":42},[47,570,571,573,576,578,581],{"class":49,"line":50},[47,572,290],{"class":53},[47,574,575],{"class":56}," { createServer } ",[47,577,284],{"class":53},[47,579,580],{"class":80}," \"node:http\"",[47,582,161],{"class":56},[47,584,585],{"class":49,"line":70},[47,586,231],{"emptyLinePlaceholder":230},[47,588,589,592,595,598,600,603,606,609],{"class":49,"line":137},[47,590,591],{"class":338},"createServer",[47,593,594],{"class":56},"((",[47,596,597],{"class":321},"req",[47,599,554],{"class":56},[47,601,602],{"class":321},"res",[47,604,605],{"class":56},") ",[47,607,608],{"class":53},"=>",[47,610,611],{"class":56}," {\n",[47,613,614,617,620,623,626,629,632,635],{"class":49,"line":164},[47,615,616],{"class":53},"  const",[47,618,619],{"class":66}," params",[47,621,622],{"class":53}," =",[47,624,625],{"class":53}," new",[47,627,628],{"class":338}," URL",[47,630,631],{"class":56},"(req.url, ",[47,633,634],{"class":80},"\"http:\u002F\u002Flocalhost\"",[47,636,637],{"class":56},").searchParams;\n",[47,639,640,642,645,647,650,653,655,657],{"class":49,"line":185},[47,641,616],{"class":53},[47,643,644],{"class":66}," sender",[47,646,622],{"class":53},[47,648,649],{"class":56}," params.",[47,651,652],{"class":338},"get",[47,654,246],{"class":56},[47,656,371],{"class":80},[47,658,271],{"class":56},[47,660,661,663,666,668,670,672,674,676],{"class":49,"line":206},[47,662,616],{"class":53},[47,664,665],{"class":66}," content",[47,667,622],{"class":53},[47,669,649],{"class":56},[47,671,652],{"class":338},[47,673,246],{"class":56},[47,675,398],{"class":80},[47,677,271],{"class":56},[47,679,680,682,685,687,689,691,693,695],{"class":49,"line":227},[47,681,616],{"class":53},[47,683,684],{"class":66}," shortCode",[47,686,622],{"class":53},[47,688,649],{"class":56},[47,690,652],{"class":338},[47,692,246],{"class":56},[47,694,420],{"class":80},[47,696,271],{"class":56},[47,698,699,701,704,706,708,710,712,714],{"class":49,"line":234},[47,700,616],{"class":53},[47,702,703],{"class":66}," received",[47,705,622],{"class":53},[47,707,649],{"class":56},[47,709,652],{"class":338},[47,711,246],{"class":56},[47,713,443],{"class":80},[47,715,271],{"class":56},[47,717,718,721,724,726,729,731,734,737,740,742,745,747,750],{"class":49,"line":240},[47,719,720],{"class":56},"  console.",[47,722,723],{"class":338},"log",[47,725,246],{"class":56},[47,727,728],{"class":80},"`SMS from ${",[47,730,473],{"class":56},[47,732,733],{"class":80},"} to ${",[47,735,736],{"class":56},"shortCode",[47,738,739],{"class":80},"} at ${",[47,741,494],{"class":56},[47,743,744],{"class":80},"}: ${",[47,746,504],{"class":56},[47,748,749],{"class":80},"}`",[47,751,271],{"class":56},[47,753,754,757,760,762,764,767,770],{"class":49,"line":260},[47,755,756],{"class":56},"  res.",[47,758,759],{"class":338},"writeHead",[47,761,246],{"class":56},[47,763,268],{"class":66},[47,765,766],{"class":56},").",[47,768,769],{"class":338},"end",[47,771,772],{"class":56},"();\n",[47,774,775,778,781,783,785],{"class":49,"line":433},[47,776,777],{"class":56},"}).",[47,779,780],{"class":338},"listen",[47,782,246],{"class":56},[47,784,557],{"class":66},[47,786,271],{"class":56},[36,788,793],{"className":789,"code":790,"filename":791,"language":792,"meta":42,"style":42},"language-csharp shiki shiki-themes github-light-high-contrast github-dark-high-contrast","\u002F\u002F ASP.NET Core minimal API (.NET 6+, project SDK Microsoft.NET.Sdk.Web).\nvar app = WebApplication.CreateBuilder(args).Build();\n\napp.MapGet(\"\u002Fwire2air\u002Finbound-sms\", (HttpRequest request) =>\n{\n    var sender = request.Query[\"MobileNumber\"].ToString();\n    var content = request.Query[\"Message\"].ToString();\n    var shortCode = request.Query[\"shortcode\"].ToString();\n    var received = request.Query[\"Rcvd\"].ToString();\n    app.Logger.LogInformation(\"SMS from {Sender} to {ShortCode} at {Received}: {Content}\", sender, shortCode, received, content);\n    return Results.Ok();\n});\n\napp.Run();\n","C#","csharp",[44,794,795,800,824,828,855,860,882,900,918,936,952,965,970,974],{"__ignoreMap":42},[47,796,797],{"class":49,"line":50},[47,798,799],{"class":133},"\u002F\u002F ASP.NET Core minimal API (.NET 6+, project SDK Microsoft.NET.Sdk.Web).\n",[47,801,802,805,808,810,813,816,819,822],{"class":49,"line":70},[47,803,804],{"class":53},"var",[47,806,807],{"class":321}," app",[47,809,622],{"class":53},[47,811,812],{"class":56}," WebApplication.",[47,814,815],{"class":338},"CreateBuilder",[47,817,818],{"class":56},"(args).",[47,820,821],{"class":338},"Build",[47,823,772],{"class":56},[47,825,826],{"class":49,"line":137},[47,827,231],{"emptyLinePlaceholder":230},[47,829,830,833,836,838,841,844,847,850,852],{"class":49,"line":164},[47,831,832],{"class":56},"app.",[47,834,835],{"class":338},"MapGet",[47,837,246],{"class":56},[47,839,840],{"class":80},"\"\u002Fwire2air\u002Finbound-sms\"",[47,842,843],{"class":56},", (",[47,845,846],{"class":321},"HttpRequest",[47,848,849],{"class":321}," request",[47,851,605],{"class":56},[47,853,854],{"class":53},"=>\n",[47,856,857],{"class":49,"line":185},[47,858,859],{"class":56},"{\n",[47,861,862,865,867,869,872,874,877,880],{"class":49,"line":206},[47,863,864],{"class":53},"    var",[47,866,644],{"class":321},[47,868,622],{"class":53},[47,870,871],{"class":56}," request.Query[",[47,873,371],{"class":80},[47,875,876],{"class":56},"].",[47,878,879],{"class":338},"ToString",[47,881,772],{"class":56},[47,883,884,886,888,890,892,894,896,898],{"class":49,"line":227},[47,885,864],{"class":53},[47,887,665],{"class":321},[47,889,622],{"class":53},[47,891,871],{"class":56},[47,893,398],{"class":80},[47,895,876],{"class":56},[47,897,879],{"class":338},[47,899,772],{"class":56},[47,901,902,904,906,908,910,912,914,916],{"class":49,"line":234},[47,903,864],{"class":53},[47,905,684],{"class":321},[47,907,622],{"class":53},[47,909,871],{"class":56},[47,911,420],{"class":80},[47,913,876],{"class":56},[47,915,879],{"class":338},[47,917,772],{"class":56},[47,919,920,922,924,926,928,930,932,934],{"class":49,"line":240},[47,921,864],{"class":53},[47,923,703],{"class":321},[47,925,622],{"class":53},[47,927,871],{"class":56},[47,929,443],{"class":80},[47,931,876],{"class":56},[47,933,879],{"class":338},[47,935,772],{"class":56},[47,937,938,941,944,946,949],{"class":49,"line":260},[47,939,940],{"class":56},"    app.Logger.",[47,942,943],{"class":338},"LogInformation",[47,945,246],{"class":56},[47,947,948],{"class":80},"\"SMS from {Sender} to {ShortCode} at {Received}: {Content}\"",[47,950,951],{"class":56},", sender, shortCode, received, content);\n",[47,953,954,957,960,963],{"class":49,"line":433},[47,955,956],{"class":53},"    return",[47,958,959],{"class":56}," Results.",[47,961,962],{"class":338},"Ok",[47,964,772],{"class":56},[47,966,967],{"class":49,"line":456},[47,968,969],{"class":56},"});\n",[47,971,972],{"class":49,"line":515},[47,973,231],{"emptyLinePlaceholder":230},[47,975,976,978,981],{"class":49,"line":528},[47,977,832],{"class":56},[47,979,980],{"class":338},"Run",[47,982,772],{"class":56},[23,984,986],{"id":985},"replying","Replying",[10,988,989,990,995,996,999,1000,1003],{},"To answer the sender, ",[991,992,994],"a",{"href":993},"\u002Fdocs\u002Frest\u002Fmessages\u002Fsend\u002F","send a message"," back to ",[44,997,998],{},"MobileNumber"," from the same ",[44,1001,1002],{},"shortcode",".",[83,1005,1007],{"question":1006,"type":86},"OQ-13",[10,1008,1009,1010,1003],{},"Whether Wire2Air also reads a reply from the body of your response to this request is not documented. The examples answer with an empty ",[44,1011,268],{},[1013,1014,1015],"style",{},"html pre.shiki code .sHUrx, html code.shiki .sHUrx{--shiki-default:#A0111F;--shiki-dark:#FF9492}html pre.shiki code .suds8, html code.shiki .suds8{--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .s-5SL, html code.shiki .s-5SL{--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .sne4z, html code.shiki .sne4z{--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .sT6z2, html code.shiki .sT6z2{--shiki-default:#032563;--shiki-dark:#ADDCFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sLBg1, html code.shiki .sLBg1{--shiki-default:#66707B;--shiki-dark:#BDC4CC}html pre.shiki code .soyes, html code.shiki .soyes{--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .sKwhi, html code.shiki .sKwhi{--shiki-default:#622CBC;--shiki-dark:#DBB7FF}",{"title":42,"searchDepth":137,"depth":137,"links":1017},[1018,1019,1020],{"id":25,"depth":70,"text":26},{"id":108,"depth":70,"text":109},{"id":985,"depth":70,"text":986},"Wire2Air forwards each text sent to your short code to your server as a GET request with the sender, the message, the time and the short code.","md",null,{},"\u002Fdocs\u002Fwebhooks\u002Finbound-sms","---\ntitle: Inbound SMS\ndescription: Wire2Air forwards each text sent to your short code to your server as a GET request with the sender, the message, the time and the short code.\nupdated: '2026-10-06'\n---\n\nWhen someone texts your short code, Wire2Air receives the message from the carrier, works out which customer it belongs to from the short code and keyword, and calls your URL.\n\n::endpoint{method=\"GET\" url=\"https:\u002F\u002Fyour-server.example\u002Fwire2air\u002Finbound-sms\" auth=\"none\"}\nYour URL. Wire2Air appends the parameters below as a query string.\n::\n\n## Parameters\n\n::param-table{id=\"param\"}\n---\nparams:\n  - name: MobileNumber\n    in: query\n    type: string\n    required: true\n    description: \"The sender's mobile number.\"\n  - name: Message\n    in: query\n    type: string\n    required: true\n    description: \"The text the sender wrote.\"\n  - name: Rcvd\n    in: query\n    type: string\n    required: true\n    example: \"1-2-2015 02:18:30\"\n    description: \"When Wire2Air received the message.\"\n  - name: shortcode\n    in: query\n    type: string\n    required: true\n    example: \"27126\"\n    description: \"Your number the message was sent to.\"\n---\n::\n\nAn example request, URL-encoded:\n\n```http [Request from Wire2Air]\nGET \u002Fwire2air\u002Finbound-sms?MobileNumber=12125551234&Message=Hello&Rcvd=1-2-2015%2002%3A18%3A30&shortcode=27126 HTTP\u002F1.1\nHost: your-server.example\n```\n\n::callout{type=\"pending\" question=\"OQ-25\"}\nNot documented: the time zone and exact format of `Rcvd`, how `Message` is encoded, and whether parameter names keep this exact case. The marketing page `\u002Fdeveloper-apis\u002F` described a different parameter, `SMSINBOXID`, for the same webhook.\n::\n\n## Examples\n\n::code-group\n```php [PHP]\n\u003C?php\n\u002F\u002F Read the values Wire2Air sends; validate them before you use them.\n$sender = $_GET['MobileNumber'] ?? '';\n$content = $_GET['Message'] ?? '';\n$shortCode = $_GET['shortcode'] ?? '';\n$received = $_GET['Rcvd'] ?? '';\n\n\u002F\u002F Store the message, then answer quickly.\nerror_log(sprintf('SMS from %s to %s at %s: %s', $sender, $shortCode, $received, $content));\nhttp_response_code(200);\n```\n```python [Python 3]\nfrom http.server import BaseHTTPRequestHandler, HTTPServer\nfrom urllib.parse import parse_qs, urlparse\n\n\nclass InboundSms(BaseHTTPRequestHandler):\n    def do_GET(self):\n        params = parse_qs(urlparse(self.path).query)\n        sender = params.get(\"MobileNumber\", [\"\"])[0]\n        content = params.get(\"Message\", [\"\"])[0]\n        short_code = params.get(\"shortcode\", [\"\"])[0]\n        received = params.get(\"Rcvd\", [\"\"])[0]\n        print(f\"SMS from {sender} to {short_code} at {received}: {content}\")\n        self.send_response(200)\n        self.end_headers()\n\n\nHTTPServer((\"\", 8080), InboundSms).serve_forever()\n```\n```javascript [Node]\nimport { createServer } from \"node:http\";\n\ncreateServer((req, res) => {\n  const params = new URL(req.url, \"http:\u002F\u002Flocalhost\").searchParams;\n  const sender = params.get(\"MobileNumber\");\n  const content = params.get(\"Message\");\n  const shortCode = params.get(\"shortcode\");\n  const received = params.get(\"Rcvd\");\n  console.log(`SMS from ${sender} to ${shortCode} at ${received}: ${content}`);\n  res.writeHead(200).end();\n}).listen(8080);\n```\n```csharp [C#]\n\u002F\u002F ASP.NET Core minimal API (.NET 6+, project SDK Microsoft.NET.Sdk.Web).\nvar app = WebApplication.CreateBuilder(args).Build();\n\napp.MapGet(\"\u002Fwire2air\u002Finbound-sms\", (HttpRequest request) =>\n{\n    var sender = request.Query[\"MobileNumber\"].ToString();\n    var content = request.Query[\"Message\"].ToString();\n    var shortCode = request.Query[\"shortcode\"].ToString();\n    var received = request.Query[\"Rcvd\"].ToString();\n    app.Logger.LogInformation(\"SMS from {Sender} to {ShortCode} at {Received}: {Content}\", sender, shortCode, received, content);\n    return Results.Ok();\n});\n\napp.Run();\n```\n::\n\n## Replying\n\nTo answer the sender, [send a message](\u002Fdocs\u002Frest\u002Fmessages\u002Fsend\u002F) back to `MobileNumber` from the same `shortcode`.\n\n::callout{type=\"pending\" question=\"OQ-13\"}\nWhether Wire2Air also reads a reply from the body of your response to this request is not documented. The examples answer with an empty `200`.\n::\n",{"title":5,"description":1021},"current","docs\u002F08.webhooks\u002F02.inbound-sms","2026-10-06","3Y183-0rItwQex3RypRkEN2lYjf34MQh7T3f1Tn7E3I",[1033],{"title":1034,"path":1035,"stem":1036,"children":1037,"navTitle":1039,"group":1023,"status":1028},"Wire2Air developer docs","\u002Fdocs","docs\u002F01.index",[1038,1040,1044,1048,1052,1056,1075,1098,1113,1156,1169],{"title":1034,"path":1035,"stem":1036,"navTitle":1039,"group":1023,"status":1028},"Overview",{"title":1041,"path":1042,"stem":1043,"navTitle":1023,"group":1041,"status":1028},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F02.getting-started",{"title":1045,"path":1046,"stem":1047,"navTitle":1023,"group":1041,"status":1028},"Authentication","\u002Fdocs\u002Fauthentication","docs\u002F03.authentication",{"title":1049,"path":1050,"stem":1051,"navTitle":1023,"group":1041,"status":1028},"Errors","\u002Fdocs\u002Ferrors","docs\u002F04.errors",{"title":1053,"path":1054,"stem":1055,"navTitle":1023,"group":1041,"status":1028},"Rate limits","\u002Fdocs\u002Frate-limits","docs\u002F05.rate-limits",{"title":1057,"navTitle":1023,"group":1023,"status":1028,"path":1058,"stem":1059,"children":1060,"page":1074},"Guides","\u002Fdocs\u002Fguides","docs\u002F06.guides",[1061,1066,1070],{"title":1062,"path":1063,"stem":1064,"navTitle":1065,"group":1023,"status":1028},"Character encoding and message length","\u002Fdocs\u002Fguides\u002Fencoding","docs\u002F06.guides\u002F01.encoding","Encoding and length",{"title":1067,"path":1068,"stem":1069,"navTitle":1023,"group":1023,"status":1028},"Bulk messaging","\u002Fdocs\u002Fguides\u002Fbulk-messaging","docs\u002F06.guides\u002F02.bulk-messaging",{"title":1071,"path":1072,"stem":1073,"navTitle":1023,"group":1023,"status":1028},"Scheduling messages","\u002Fdocs\u002Fguides\u002Fscheduling","docs\u002F06.guides\u002F03.scheduling",false,{"title":1076,"path":1077,"stem":1078,"children":1079,"navTitle":1023,"group":1023,"status":1028},"REST API v1","\u002Fdocs\u002Frest","docs\u002F07.rest\u002F01.index",[1080,1081,1094],{"title":1076,"path":1077,"stem":1078,"navTitle":1039,"group":1023,"status":1028},{"title":1082,"navTitle":1023,"group":1023,"status":1028,"path":1083,"stem":1084,"children":1085,"page":1074},"Messages","\u002Fdocs\u002Frest\u002Fmessages","docs\u002F07.rest\u002F02.messages",[1086,1090],{"title":1087,"path":1088,"stem":1089,"navTitle":1023,"group":1023,"status":1028},"Send a message","\u002Fdocs\u002Frest\u002Fmessages\u002Fsend","docs\u002F07.rest\u002F02.messages\u002F01.send",{"title":1091,"path":1092,"stem":1093,"navTitle":1023,"group":1023,"status":1028},"List received messages","\u002Fdocs\u002Frest\u002Fmessages\u002Flist","docs\u002F07.rest\u002F02.messages\u002F02.list",{"title":1095,"path":1096,"stem":1097,"navTitle":1023,"group":1023,"status":1028},"Campaigns","\u002Fdocs\u002Frest\u002Fcampaigns","docs\u002F07.rest\u002F03.campaigns",{"title":1099,"path":1100,"stem":1101,"children":1102,"navTitle":1023,"group":1023,"status":1028},"Webhooks","\u002Fdocs\u002Fwebhooks","docs\u002F08.webhooks\u002F01.index",[1103,1104,1105,1109],{"title":1099,"path":1100,"stem":1101,"navTitle":1039,"group":1023,"status":1028},{"title":5,"path":1025,"stem":1029,"navTitle":1023,"group":1023,"status":1028},{"title":1106,"path":1107,"stem":1108,"navTitle":1023,"group":1023,"status":1028},"Inbound SMS and MMS","\u002Fdocs\u002Fwebhooks\u002Finbound-mms","docs\u002F08.webhooks\u002F03.inbound-mms",{"title":1110,"path":1111,"stem":1112,"navTitle":1023,"group":1023,"status":1028},"Delivery reports","\u002Fdocs\u002Fwebhooks\u002Fdelivery-reports","docs\u002F08.webhooks\u002F04.delivery-reports",{"title":1114,"path":1115,"stem":1116,"children":1117,"navTitle":1023,"group":1023,"status":1119},"HTTP API","\u002Fdocs\u002Fhttp-api","docs\u002F09.http-api\u002F01.index",[1118,1120,1124,1128,1132,1136,1140,1144,1148,1152],{"title":1114,"path":1115,"stem":1116,"navTitle":1039,"group":1023,"status":1119},"legacy",{"title":1121,"path":1122,"stem":1123,"navTitle":1023,"group":1023,"status":1119},"Send SMS","\u002Fdocs\u002Fhttp-api\u002Fsend-sms","docs\u002F09.http-api\u002F02.send-sms",{"title":1125,"path":1126,"stem":1127,"navTitle":1023,"group":1023,"status":1119},"Send MMS","\u002Fdocs\u002Fhttp-api\u002Fsend-mms","docs\u002F09.http-api\u002F03.send-mms",{"title":1129,"path":1130,"stem":1131,"navTitle":1023,"group":1023,"status":1119},"Credit balance","\u002Fdocs\u002Fhttp-api\u002Fcredit-balance","docs\u002F09.http-api\u002F04.credit-balance",{"title":1133,"path":1134,"stem":1135,"navTitle":1023,"group":1023,"status":1119},"Carrier lookup","\u002Fdocs\u002Fhttp-api\u002Fcarrier-lookup","docs\u002F09.http-api\u002F05.carrier-lookup",{"title":1137,"path":1138,"stem":1139,"navTitle":1023,"group":1023,"status":1119},"Keyword lookup","\u002Fdocs\u002Fhttp-api\u002Fkeyword-lookup","docs\u002F09.http-api\u002F06.keyword-lookup",{"title":1141,"path":1142,"stem":1143,"navTitle":1023,"group":1023,"status":1119},"Keyword register","\u002Fdocs\u002Fhttp-api\u002Fkeyword-register","docs\u002F09.http-api\u002F07.keyword-register",{"title":1145,"path":1146,"stem":1147,"navTitle":1023,"group":1023,"status":1119},"Keyword credits","\u002Fdocs\u002Fhttp-api\u002Fkeyword-credits","docs\u002F09.http-api\u002F08.keyword-credits",{"title":1149,"path":1150,"stem":1151,"navTitle":1023,"group":1023,"status":1119},"Subscribe user","\u002Fdocs\u002Fhttp-api\u002Fsubscribe-user","docs\u002F09.http-api\u002F09.subscribe-user",{"title":1153,"path":1154,"stem":1155,"navTitle":1023,"group":1023,"status":1119},"Send invitation","\u002Fdocs\u002Fhttp-api\u002Fsend-invitation","docs\u002F09.http-api\u002F10.send-invitation",{"title":1157,"navTitle":1023,"group":1023,"status":1028,"path":1158,"stem":1159,"children":1160,"page":1074},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F10.integrations",[1161,1165],{"title":1162,"path":1163,"stem":1164,"navTitle":1023,"group":1023,"status":1028},"RSA Authentication Manager","\u002Fdocs\u002Fintegrations\u002Frsa-authentication-manager","docs\u002F10.integrations\u002F01.rsa-authentication-manager",{"title":1166,"path":1167,"stem":1168,"navTitle":1023,"group":1023,"status":1028},"Zapier","\u002Fdocs\u002Fintegrations\u002Fzapier","docs\u002F10.integrations\u002F02.zapier",{"title":1170,"path":1171,"stem":1172,"navTitle":1023,"group":1023,"status":1028},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F11.changelog",[1174,1176],{"title":1099,"path":1100,"stem":1101,"description":1175,"children":-1},"How Wire2Air calls your server when a message arrives or a delivery report comes in, and how to build a receiver that is safe to expose.",{"title":1106,"path":1107,"stem":1108,"description":1177,"children":-1},"Wire2Air forwards picture messages (and text) sent to your short code to your server as a GET request with the subject, the media location and the file names.",[1179,1183,1186,1189,1192,1195,1198,1201],[1180,1181],"path",{"d":1182},"M3 21l18 0",[1180,1184],{"d":1185},"M3 10l18 0",[1180,1187],{"d":1188},"M5 6l7 -3l7 3",[1180,1190],{"d":1191},"M4 10l0 11",[1180,1193],{"d":1194},"M20 10l0 11",[1180,1196],{"d":1197},"M8 14l0 3",[1180,1199],{"d":1200},"M12 14l0 3",[1180,1202],{"d":1203},"M16 14l0 3",[1205,1207,1210,1213,1216],[1180,1206],{"d":1182},[1180,1208],{"d":1209},"M3 7v1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1h-18l2 -4h14l2 4",[1180,1211],{"d":1212},"M5 21l0 -10.15",[1180,1214],{"d":1215},"M19 21l0 -10.15",[1180,1217],{"d":1218},"M9 21v-4a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v4",[1220,1223,1226,1229],[1180,1221],{"d":1222},"M3 13a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -6",[1180,1224],{"d":1225},"M15 9a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -10",[1180,1227],{"d":1228},"M9 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -14",[1180,1230],{"d":1231},"M4 20h14",[1233,1236],[1180,1234],{"d":1235},"M10 3.2a9 9 0 1 0 10.8 10.8a1 1 0 0 0 -1 -1h-6.8a2 2 0 0 1 -2 -2v-7a.9 .9 0 0 0 -1 -.8",[1180,1237],{"d":1238},"M15 3.5a9 9 0 0 1 5.5 5.5h-4.5a1 1 0 0 1 -1 -1v-4.5",[1240,1243,1246],[1180,1241],{"d":1242},"M7 8l-4 4l4 4",[1180,1244],{"d":1245},"M17 8l4 4l-4 4",[1180,1247],{"d":1248},"M14 4l-4 16",[1250,1253,1257,1260],[1180,1251],{"d":1252},"M9 15l6 -6",[1180,1254],{"d":1255,"fill":1256},"M9 9.5a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0","currentColor",[1180,1258],{"d":1259,"fill":1256},"M14 14.5a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0",[1180,1261],{"d":1262},"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",[1264,1267,1270,1273],[1180,1265],{"d":1266},"M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572",[1180,1268],{"d":1269},"M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25",[1180,1271],{"d":1272},"M12.5 15.5l2 2",[1180,1274],{"d":1275},"M15 13l2 2",[1277,1280,1283,1286],[1180,1278],{"d":1279},"M12 18h-7a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v7.5",[1180,1281],{"d":1282},"M3 6l9 6l9 -6",[1180,1284],{"d":1285},"M15 18h6",[1180,1287],{"d":1288},"M18 15l3 3l-3 3",[1290,1293],[1180,1291],{"d":1292},"M21 14l-3 -3h-7a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1h9a1 1 0 0 1 1 1v10",[1180,1294],{"d":1295},"M14 15v2a1 1 0 0 1 -1 1h-7l-3 3v-10a1 1 0 0 1 1 -1h2",[1297,1300],[1180,1298],{"d":1299},"M15 12.9a5 5 0 1 0 -3.902 -3.9",[1180,1301],{"d":1302},"M15 12.9l-3.902 -3.899l-7.513 8.584a2 2 0 1 0 2.827 2.83l8.588 -7.515",[1304,1307,1310,1313],[1180,1305],{"d":1306},"M15 8h.01",[1180,1308],{"d":1309},"M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12",[1180,1311],{"d":1312},"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5",[1180,1314],{"d":1315},"M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3",[1317,1320,1323,1326,1329,1332],[1180,1318],{"d":1319},"M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5",[1180,1321],{"d":1322},"M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5",[1180,1324],{"d":1325},"M3 21l2.5 -2.5",[1180,1327],{"d":1328},"M18.5 5.5l2.5 -2.5",[1180,1330],{"d":1331},"M10 11l-2 2",[1180,1333],{"d":1334},"M13 14l-2 2",[1336,1339],[1180,1337],{"d":1338},"M22 9l-10 -4l-10 4l10 4l10 -4v6",[1180,1340],{"d":1341},"M6 10.6v5.4a6 3 0 0 0 12 0v-5.4",[1343,1346,1349],[1180,1344],{"d":1345},"M18 8a3 3 0 0 1 0 6",[1180,1347],{"d":1348},"M10 8v11a1 1 0 0 1 -1 1h-1a1 1 0 0 1 -1 -1v-5",[1180,1350],{"d":1351},"M12 8l4.524 -3.77a.9 .9 0 0 1 1.476 .692v12.156a.9 .9 0 0 1 -1.476 .692l-4.524 -3.77h-8a1 1 0 0 1 -1 -1v-4a1 1 0 0 1 1 -1h8",[1353,1356,1359,1362,1365],[1180,1354],{"d":1355},"M6 4h-1a2 2 0 0 0 -2 2v3.5a5.5 5.5 0 0 0 11 0v-3.5a2 2 0 0 0 -2 -2h-1",[1180,1357],{"d":1358},"M8 15a6 6 0 1 0 12 0v-3",[1180,1360],{"d":1361},"M11 3v2",[1180,1363],{"d":1364},"M6 3v2",[1180,1366],{"d":1367},"M18 10a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[1369,1372,1375,1378,1381,1384],[1180,1370],{"d":1371},"M8 21l8 0",[1180,1373],{"d":1374},"M12 17l0 4",[1180,1376],{"d":1377},"M7 4l10 0",[1180,1379],{"d":1380},"M17 4v8a5 5 0 0 1 -10 0v-8",[1180,1382],{"d":1383},"M3 9a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[1180,1385],{"d":1386},"M17 9a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",[1388,1391,1394,1397],[1180,1389],{"d":1390},"M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0",[1180,1392],{"d":1393},"M16 19h6",[1180,1395],{"d":1396},"M19 16v6",[1180,1398],{"d":1399},"M6 21v-2a4 4 0 0 1 4 -4h4",3529977955]