[{"data":1,"prerenderedAt":1752},["ShallowReactive",2],{"doc-\u002Fapi\u002Fingest":3},{"id":4,"title":5,"body":6,"description":1743,"edit":1744,"extension":1745,"meta":1746,"navigation":1074,"path":1747,"seo":1748,"stem":1749,"vertical":1744,"weight":1750,"__hash__":1751},"content\u002Fapi\u002Fingest.md","POST \u002Fv1\u002Fingest",{"type":7,"value":8,"toc":1734},"minimark",[9,13,18,31,35,91,95,296,299,409,413,419,585,595,609,613,1458,1462,1477,1487,1491,1606,1609,1727,1730],[10,11,12],"p",{},"The general-purpose ingest endpoint. Use it from any device that can do an\nHTTPS POST: ESP32, Arduino with WiFi, a bash script on a Pi, anything. The\nShelly-specific GET variant exists for devices that cannot do POST; the TTN\nwebhook exists for LoRaWAN. Everything else uses this.",[14,15,17],"h2",{"id":16},"endpoint","Endpoint",[19,20,22],"cmd",{"label":21},"$ method + path",[10,23,24,25],{},"POST ",[26,27,28],"a",{"href":28,"rel":29},"https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest",[30],"nofollow",[14,32,34],{"id":33},"headers","Headers",[36,37,38,51],"table",{},[39,40,41],"thead",{},[42,43,44,48],"tr",{},[45,46,47],"th",{},"Header",[45,49,50],{},"Value",[52,53,54,69,81],"tbody",{},[42,55,56,63],{},[57,58,59],"td",{},[60,61,62],"code",{},"Authorization",[57,64,65,68],{},[60,66,67],{},"Bearer ds_live_…"," (device token)",[42,70,71,76],{},[57,72,73],{},[60,74,75],{},"Content-Type",[57,77,78],{},[60,79,80],{},"application\u002Fjson",[42,82,83,88],{},[57,84,85],{},[60,86,87],{},"X-Device-Id",[57,89,90],{},"optional, overrides device id in body",[14,92,94],{"id":93},"request-body","Request body",[96,97,102],"pre",{"className":98,"code":99,"language":100,"meta":101,"style":101},"language-json shiki shiki-themes github-dark github-dark","{\n  \"device\": \"fridge01\",\n  \"ts\":     \"2026-05-17T08:22:00Z\",\n  \"measurements\": [\n    { \"type\": \"temperature\", \"value\": 4.2,  \"label\": \"front\" },\n    { \"type\": \"temperature\", \"value\": 4.5,  \"label\": \"back\"  },\n    { \"type\": \"humidity\",    \"value\": 64.1 },\n    { \"type\": \"battery\",     \"value\": 92,   \"unit\": \"%\"      }\n  ]\n}\n","json","",[60,103,104,113,130,144,153,192,224,248,284,290],{"__ignoreMap":101},[105,106,109],"span",{"class":107,"line":108},"line",1,[105,110,112],{"class":111},"suv1-","{\n",[105,114,116,120,123,127],{"class":107,"line":115},2,[105,117,119],{"class":118},"s8ozJ","  \"device\"",[105,121,122],{"class":111},": ",[105,124,126],{"class":125},"s4wv1","\"fridge01\"",[105,128,129],{"class":111},",\n",[105,131,133,136,139,142],{"class":107,"line":132},3,[105,134,135],{"class":118},"  \"ts\"",[105,137,138],{"class":111},":     ",[105,140,141],{"class":125},"\"2026-05-17T08:22:00Z\"",[105,143,129],{"class":111},[105,145,147,150],{"class":107,"line":146},4,[105,148,149],{"class":118},"  \"measurements\"",[105,151,152],{"class":111},": [\n",[105,154,156,159,162,164,167,170,173,175,178,181,184,186,189],{"class":107,"line":155},5,[105,157,158],{"class":111},"    { ",[105,160,161],{"class":118},"\"type\"",[105,163,122],{"class":111},[105,165,166],{"class":125},"\"temperature\"",[105,168,169],{"class":111},", ",[105,171,172],{"class":118},"\"value\"",[105,174,122],{"class":111},[105,176,177],{"class":118},"4.2",[105,179,180],{"class":111},",  ",[105,182,183],{"class":118},"\"label\"",[105,185,122],{"class":111},[105,187,188],{"class":125},"\"front\"",[105,190,191],{"class":111}," },\n",[105,193,195,197,199,201,203,205,207,209,212,214,216,218,221],{"class":107,"line":194},6,[105,196,158],{"class":111},[105,198,161],{"class":118},[105,200,122],{"class":111},[105,202,166],{"class":125},[105,204,169],{"class":111},[105,206,172],{"class":118},[105,208,122],{"class":111},[105,210,211],{"class":118},"4.5",[105,213,180],{"class":111},[105,215,183],{"class":118},[105,217,122],{"class":111},[105,219,220],{"class":125},"\"back\"",[105,222,223],{"class":111},"  },\n",[105,225,227,229,231,233,236,239,241,243,246],{"class":107,"line":226},7,[105,228,158],{"class":111},[105,230,161],{"class":118},[105,232,122],{"class":111},[105,234,235],{"class":125},"\"humidity\"",[105,237,238],{"class":111},",    ",[105,240,172],{"class":118},[105,242,122],{"class":111},[105,244,245],{"class":118},"64.1",[105,247,191],{"class":111},[105,249,251,253,255,257,260,263,265,267,270,273,276,278,281],{"class":107,"line":250},8,[105,252,158],{"class":111},[105,254,161],{"class":118},[105,256,122],{"class":111},[105,258,259],{"class":125},"\"battery\"",[105,261,262],{"class":111},",     ",[105,264,172],{"class":118},[105,266,122],{"class":111},[105,268,269],{"class":118},"92",[105,271,272],{"class":111},",   ",[105,274,275],{"class":118},"\"unit\"",[105,277,122],{"class":111},[105,279,280],{"class":125},"\"%\"",[105,282,283],{"class":111},"      }\n",[105,285,287],{"class":107,"line":286},9,[105,288,289],{"class":111},"  ]\n",[105,291,293],{"class":107,"line":292},10,[105,294,295],{"class":111},"}\n",[10,297,298],{},"Fields:",[300,301,302,312,318],"ul",{},[303,304,305,308,309,311],"li",{},[60,306,307],{},"device"," — required if ",[60,310,87],{}," is not set. The local id of the\ndevice (the one in the dashboard).",[303,313,314,317],{},[60,315,316],{},"ts"," — optional. If absent, server stamps with receive time. We recommend\nsetting it whenever the device has a clock, even a coarse one.",[303,319,320,323,324],{},[60,321,322],{},"measurements"," — required, 1–32 entries. Each entry has:\n",[300,325,326,380,394,403],{},[303,327,328,331,332,335,336,339,340,343,344,347,348,351,352,355,356,359,360,363,364,367,368,371,372,375,376,379],{},[60,329,330],{},"type"," — required. One of ",[60,333,334],{},"temperature"," (°C), ",[60,337,338],{},"humidity"," (%),\n",[60,341,342],{},"pressure"," (hPa), ",[60,345,346],{},"co2"," (ppm), ",[60,349,350],{},"voltage"," (V), ",[60,353,354],{},"current"," (A),\n",[60,357,358],{},"power"," (W), ",[60,361,362],{},"leak"," (boolean as 0\u002F1), ",[60,365,366],{},"battery"," (% by default,\n",[60,369,370],{},"V"," if ",[60,373,374],{},"unit: V","), ",[60,377,378],{},"signal"," (dBm).",[303,381,382,385,386,389,390,393],{},[60,383,384],{},"value"," — required. Number. Booleans get encoded as ",[60,387,388],{},"0"," \u002F ",[60,391,392],{},"1",".",[303,395,396,399,400,402],{},[60,397,398],{},"label"," — optional, free-text. Disambiguates multiple sensors of the\nsame ",[60,401,330],{}," on one device.",[303,404,405,408],{},[60,406,407],{},"unit"," — optional. Overrides the default unit. We do not convert.",[14,410,412],{"id":411},"response","Response",[10,414,415,418],{},[60,416,417],{},"200 OK",":",[96,420,422],{"className":98,"code":421,"language":100,"meta":101,"style":101},"{\n  \"accepted\": 4,\n  \"deduplicated\": 0,\n  \"channels\": [\n    { \"type\": \"temperature\", \"label\": \"front\", \"channel_id\": \"chn_4f3c1d\" },\n    { \"type\": \"temperature\", \"label\": \"back\",  \"channel_id\": \"chn_4f3c1e\" },\n    { \"type\": \"humidity\",    \"label\": null,    \"channel_id\": \"chn_4f3c1f\" },\n    { \"type\": \"battery\",     \"label\": null,    \"channel_id\": \"chn_4f3c20\" }\n  ]\n}\n",[60,423,424,428,440,451,458,488,517,547,577,581],{"__ignoreMap":101},[105,425,426],{"class":107,"line":108},[105,427,112],{"class":111},[105,429,430,433,435,438],{"class":107,"line":115},[105,431,432],{"class":118},"  \"accepted\"",[105,434,122],{"class":111},[105,436,437],{"class":118},"4",[105,439,129],{"class":111},[105,441,442,445,447,449],{"class":107,"line":132},[105,443,444],{"class":118},"  \"deduplicated\"",[105,446,122],{"class":111},[105,448,388],{"class":118},[105,450,129],{"class":111},[105,452,453,456],{"class":107,"line":146},[105,454,455],{"class":118},"  \"channels\"",[105,457,152],{"class":111},[105,459,460,462,464,466,468,470,472,474,476,478,481,483,486],{"class":107,"line":155},[105,461,158],{"class":111},[105,463,161],{"class":118},[105,465,122],{"class":111},[105,467,166],{"class":125},[105,469,169],{"class":111},[105,471,183],{"class":118},[105,473,122],{"class":111},[105,475,188],{"class":125},[105,477,169],{"class":111},[105,479,480],{"class":118},"\"channel_id\"",[105,482,122],{"class":111},[105,484,485],{"class":125},"\"chn_4f3c1d\"",[105,487,191],{"class":111},[105,489,490,492,494,496,498,500,502,504,506,508,510,512,515],{"class":107,"line":194},[105,491,158],{"class":111},[105,493,161],{"class":118},[105,495,122],{"class":111},[105,497,166],{"class":125},[105,499,169],{"class":111},[105,501,183],{"class":118},[105,503,122],{"class":111},[105,505,220],{"class":125},[105,507,180],{"class":111},[105,509,480],{"class":118},[105,511,122],{"class":111},[105,513,514],{"class":125},"\"chn_4f3c1e\"",[105,516,191],{"class":111},[105,518,519,521,523,525,527,529,531,533,536,538,540,542,545],{"class":107,"line":226},[105,520,158],{"class":111},[105,522,161],{"class":118},[105,524,122],{"class":111},[105,526,235],{"class":125},[105,528,238],{"class":111},[105,530,183],{"class":118},[105,532,122],{"class":111},[105,534,535],{"class":118},"null",[105,537,238],{"class":111},[105,539,480],{"class":118},[105,541,122],{"class":111},[105,543,544],{"class":125},"\"chn_4f3c1f\"",[105,546,191],{"class":111},[105,548,549,551,553,555,557,559,561,563,565,567,569,571,574],{"class":107,"line":250},[105,550,158],{"class":111},[105,552,161],{"class":118},[105,554,122],{"class":111},[105,556,259],{"class":125},[105,558,262],{"class":111},[105,560,183],{"class":118},[105,562,122],{"class":111},[105,564,535],{"class":118},[105,566,238],{"class":111},[105,568,480],{"class":118},[105,570,122],{"class":111},[105,572,573],{"class":125},"\"chn_4f3c20\"",[105,575,576],{"class":111}," }\n",[105,578,579],{"class":107,"line":286},[105,580,289],{"class":111},[105,582,583],{"class":107,"line":292},[105,584,295],{"class":111},[10,586,587,590,591,594],{},[60,588,589],{},"channels[]"," returns the resolved channel ids so subsequent calls (read,\nrule create) can address the channel directly. The first uplink on a fresh\ndevice auto-creates channels per ",[60,592,593],{},"(type, label)"," combination using the\nsite's vertical default thresholds.",[10,596,597,600,601,604,605,608],{},[60,598,599],{},"accepted"," is the number of measurements written. ",[60,602,603],{},"deduplicated"," is the\nnumber that arrived with the same ",[60,606,607],{},"(device, ts, channel)"," as an existing\nrow (a no-op, but counted for diagnostic purposes).",[14,610,612],{"id":611},"examples","Examples",[614,615,617,708,892,1046,1331],"tabs",{"labels":616},"curl|python|esphome|arduino|http",[618,619,620],"template",{"v-slot:tab-0":101},[96,621,625],{"className":622,"code":623,"language":624,"meta":101,"style":101},"language-bash shiki shiki-themes github-dark github-dark","curl -X POST https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest \\\n  -H \"Authorization: Bearer ds_live_4f3c…\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"device\": \"fridge01\",\n    \"ts\": \"2026-05-17T08:22:00Z\",\n    \"measurements\": [\n      {\"type\":\"temperature\",\"value\":4.2},\n      {\"type\":\"humidity\",\"value\":64.1}\n    ]\n  }'\n","bash",[60,626,627,645,655,664,672,677,682,687,692,697,702],{"__ignoreMap":101},[105,628,629,633,636,639,642],{"class":107,"line":108},[105,630,632],{"class":631},"sFR8T","curl",[105,634,635],{"class":118}," -X",[105,637,638],{"class":125}," POST",[105,640,641],{"class":125}," https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest",[105,643,644],{"class":118}," \\\n",[105,646,647,650,653],{"class":107,"line":115},[105,648,649],{"class":118},"  -H",[105,651,652],{"class":125}," \"Authorization: Bearer ds_live_4f3c…\"",[105,654,644],{"class":118},[105,656,657,659,662],{"class":107,"line":132},[105,658,649],{"class":118},[105,660,661],{"class":125}," \"Content-Type: application\u002Fjson\"",[105,663,644],{"class":118},[105,665,666,669],{"class":107,"line":146},[105,667,668],{"class":118},"  -d",[105,670,671],{"class":125}," '{\n",[105,673,674],{"class":107,"line":155},[105,675,676],{"class":125},"    \"device\": \"fridge01\",\n",[105,678,679],{"class":107,"line":194},[105,680,681],{"class":125},"    \"ts\": \"2026-05-17T08:22:00Z\",\n",[105,683,684],{"class":107,"line":226},[105,685,686],{"class":125},"    \"measurements\": [\n",[105,688,689],{"class":107,"line":250},[105,690,691],{"class":125},"      {\"type\":\"temperature\",\"value\":4.2},\n",[105,693,694],{"class":107,"line":286},[105,695,696],{"class":125},"      {\"type\":\"humidity\",\"value\":64.1}\n",[105,698,699],{"class":107,"line":292},[105,700,701],{"class":125},"    ]\n",[105,703,705],{"class":107,"line":704},11,[105,706,707],{"class":125},"  }'\n",[618,709,710],{"v-slot:tab-1":101},[96,711,715],{"className":712,"code":713,"language":714,"meta":101,"style":101},"language-python shiki shiki-themes github-dark github-dark","import requests, datetime as dt\nr = requests.post(\n    \"https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest\",\n    headers={\"Authorization\": \"Bearer ds_live_4f3c…\"},\n    json={\n        \"device\": \"fridge01\",\n        \"ts\": dt.datetime.utcnow().isoformat() + \"Z\",\n        \"measurements\": [\n            {\"type\": \"temperature\", \"value\": 4.2},\n            {\"type\": \"humidity\",    \"value\": 64.1},\n        ],\n    },\n    timeout=5,\n)\nr.raise_for_status()\n","python",[60,716,717,732,743,750,772,781,792,808,815,836,856,861,867,880,886],{"__ignoreMap":101},[105,718,719,723,726,729],{"class":107,"line":108},[105,720,722],{"class":721},"sOPea","import",[105,724,725],{"class":111}," requests, datetime ",[105,727,728],{"class":721},"as",[105,730,731],{"class":111}," dt\n",[105,733,734,737,740],{"class":107,"line":115},[105,735,736],{"class":111},"r ",[105,738,739],{"class":721},"=",[105,741,742],{"class":111}," requests.post(\n",[105,744,745,748],{"class":107,"line":132},[105,746,747],{"class":125},"    \"https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest\"",[105,749,129],{"class":111},[105,751,752,756,758,761,764,766,769],{"class":107,"line":146},[105,753,755],{"class":754},"s-3mD","    headers",[105,757,739],{"class":721},[105,759,760],{"class":111},"{",[105,762,763],{"class":125},"\"Authorization\"",[105,765,122],{"class":111},[105,767,768],{"class":125},"\"Bearer ds_live_4f3c…\"",[105,770,771],{"class":111},"},\n",[105,773,774,777,779],{"class":107,"line":155},[105,775,776],{"class":754},"    json",[105,778,739],{"class":721},[105,780,112],{"class":111},[105,782,783,786,788,790],{"class":107,"line":194},[105,784,785],{"class":125},"        \"device\"",[105,787,122],{"class":111},[105,789,126],{"class":125},[105,791,129],{"class":111},[105,793,794,797,800,803,806],{"class":107,"line":226},[105,795,796],{"class":125},"        \"ts\"",[105,798,799],{"class":111},": dt.datetime.utcnow().isoformat() ",[105,801,802],{"class":721},"+",[105,804,805],{"class":125}," \"Z\"",[105,807,129],{"class":111},[105,809,810,813],{"class":107,"line":250},[105,811,812],{"class":125},"        \"measurements\"",[105,814,152],{"class":111},[105,816,817,820,822,824,826,828,830,832,834],{"class":107,"line":286},[105,818,819],{"class":111},"            {",[105,821,161],{"class":125},[105,823,122],{"class":111},[105,825,166],{"class":125},[105,827,169],{"class":111},[105,829,172],{"class":125},[105,831,122],{"class":111},[105,833,177],{"class":118},[105,835,771],{"class":111},[105,837,838,840,842,844,846,848,850,852,854],{"class":107,"line":292},[105,839,819],{"class":111},[105,841,161],{"class":125},[105,843,122],{"class":111},[105,845,235],{"class":125},[105,847,238],{"class":111},[105,849,172],{"class":125},[105,851,122],{"class":111},[105,853,245],{"class":118},[105,855,771],{"class":111},[105,857,858],{"class":107,"line":704},[105,859,860],{"class":111},"        ],\n",[105,862,864],{"class":107,"line":863},12,[105,865,866],{"class":111},"    },\n",[105,868,870,873,875,878],{"class":107,"line":869},13,[105,871,872],{"class":754},"    timeout",[105,874,739],{"class":721},[105,876,877],{"class":118},"5",[105,879,129],{"class":111},[105,881,883],{"class":107,"line":882},14,[105,884,885],{"class":111},")\n",[105,887,889],{"class":107,"line":888},15,[105,890,891],{"class":111},"r.raise_for_status()\n",[618,893,894],{"v-slot:tab-2":101},[96,895,899],{"className":896,"code":897,"language":898,"meta":101,"style":101},"language-yaml shiki shiki-themes github-dark github-dark","http_request:\n  useragent: opensense-esp32\n  timeout: 10s\ninterval:\n  - interval: 60s\n    then:\n      - http_request.post:\n          url: https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest\n          headers:\n            Authorization: 'Bearer ds_live_4f3c…'\n            Content-Type: application\u002Fjson\n          body: |-\n            { \"device\": \"fridge01\",\n              \"ts\": \"{{ now().to_iso() }}\",\n              \"measurements\": [\n                { \"type\": \"temperature\", \"value\": {{ id(temp).state }} },\n                { \"type\": \"humidity\",    \"value\": {{ id(hum).state  }} }\n              ] }\n","yaml",[60,900,901,910,920,930,937,949,956,966,976,983,993,1003,1013,1018,1023,1028,1034,1040],{"__ignoreMap":101},[105,902,903,907],{"class":107,"line":108},[105,904,906],{"class":905},"sxg3X","http_request",[105,908,909],{"class":111},":\n",[105,911,912,915,917],{"class":107,"line":115},[105,913,914],{"class":905},"  useragent",[105,916,122],{"class":111},[105,918,919],{"class":125},"opensense-esp32\n",[105,921,922,925,927],{"class":107,"line":132},[105,923,924],{"class":905},"  timeout",[105,926,122],{"class":111},[105,928,929],{"class":125},"10s\n",[105,931,932,935],{"class":107,"line":146},[105,933,934],{"class":905},"interval",[105,936,909],{"class":111},[105,938,939,942,944,946],{"class":107,"line":155},[105,940,941],{"class":111},"  - ",[105,943,934],{"class":905},[105,945,122],{"class":111},[105,947,948],{"class":125},"60s\n",[105,950,951,954],{"class":107,"line":194},[105,952,953],{"class":905},"    then",[105,955,909],{"class":111},[105,957,958,961,964],{"class":107,"line":226},[105,959,960],{"class":111},"      - ",[105,962,963],{"class":905},"http_request.post",[105,965,909],{"class":111},[105,967,968,971,973],{"class":107,"line":250},[105,969,970],{"class":905},"          url",[105,972,122],{"class":111},[105,974,975],{"class":125},"https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest\n",[105,977,978,981],{"class":107,"line":286},[105,979,980],{"class":905},"          headers",[105,982,909],{"class":111},[105,984,985,988,990],{"class":107,"line":292},[105,986,987],{"class":905},"            Authorization",[105,989,122],{"class":111},[105,991,992],{"class":125},"'Bearer ds_live_4f3c…'\n",[105,994,995,998,1000],{"class":107,"line":704},[105,996,997],{"class":905},"            Content-Type",[105,999,122],{"class":111},[105,1001,1002],{"class":125},"application\u002Fjson\n",[105,1004,1005,1008,1010],{"class":107,"line":863},[105,1006,1007],{"class":905},"          body",[105,1009,122],{"class":111},[105,1011,1012],{"class":721},"|-\n",[105,1014,1015],{"class":107,"line":869},[105,1016,1017],{"class":125},"            { \"device\": \"fridge01\",\n",[105,1019,1020],{"class":107,"line":882},[105,1021,1022],{"class":125},"              \"ts\": \"{{ now().to_iso() }}\",\n",[105,1024,1025],{"class":107,"line":888},[105,1026,1027],{"class":125},"              \"measurements\": [\n",[105,1029,1031],{"class":107,"line":1030},16,[105,1032,1033],{"class":125},"                { \"type\": \"temperature\", \"value\": {{ id(temp).state }} },\n",[105,1035,1037],{"class":107,"line":1036},17,[105,1038,1039],{"class":125},"                { \"type\": \"humidity\",    \"value\": {{ id(hum).state  }} }\n",[105,1041,1043],{"class":107,"line":1042},18,[105,1044,1045],{"class":125},"              ] }\n",[618,1047,1048],{"v-slot:tab-3":101},[96,1049,1053],{"className":1050,"code":1051,"language":1052,"meta":101,"style":101},"language-cpp shiki shiki-themes github-dark github-dark","#include \u003CWiFi.h>\n#include \u003CHTTPClient.h>\n\nvoid post(float t, float h) {\n  HTTPClient http;\n  http.begin(\"https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest\");\n  http.addHeader(\"Authorization\", \"Bearer ds_live_4f3c…\");\n  http.addHeader(\"Content-Type\", \"application\u002Fjson\");\n  char buf[192];\n  snprintf(buf, sizeof(buf),\n    \"{\\\"device\\\":\\\"fridge01\\\",\\\"measurements\\\":[{\\\"type\\\":\\\"temperature\\\",\\\"value\\\":%.2f},{\\\"type\\\":\\\"humidity\\\",\\\"value\\\":%.2f}]}\",\n    t, h);\n  int code = http.POST((uint8_t*)buf, strlen(buf));\n  http.end();\n}\n","cpp",[60,1054,1055,1063,1070,1076,1103,1108,1124,1141,1159,1173,1187,1281,1286,1317,1327],{"__ignoreMap":101},[105,1056,1057,1060],{"class":107,"line":108},[105,1058,1059],{"class":721},"#include",[105,1061,1062],{"class":125}," \u003CWiFi.h>\n",[105,1064,1065,1067],{"class":107,"line":115},[105,1066,1059],{"class":721},[105,1068,1069],{"class":125}," \u003CHTTPClient.h>\n",[105,1071,1072],{"class":107,"line":132},[105,1073,1075],{"emptyLinePlaceholder":1074},true,"\n",[105,1077,1078,1081,1084,1087,1090,1093,1095,1097,1100],{"class":107,"line":146},[105,1079,1080],{"class":721},"void",[105,1082,1083],{"class":631}," post",[105,1085,1086],{"class":111},"(",[105,1088,1089],{"class":721},"float",[105,1091,1092],{"class":754}," t",[105,1094,169],{"class":111},[105,1096,1089],{"class":721},[105,1098,1099],{"class":754}," h",[105,1101,1102],{"class":111},") {\n",[105,1104,1105],{"class":107,"line":155},[105,1106,1107],{"class":111},"  HTTPClient http;\n",[105,1109,1110,1113,1116,1118,1121],{"class":107,"line":194},[105,1111,1112],{"class":111},"  http.",[105,1114,1115],{"class":631},"begin",[105,1117,1086],{"class":111},[105,1119,1120],{"class":125},"\"https:\u002F\u002Fapi.opensense.murzin.digital\u002Fv1\u002Fingest\"",[105,1122,1123],{"class":111},");\n",[105,1125,1126,1128,1131,1133,1135,1137,1139],{"class":107,"line":226},[105,1127,1112],{"class":111},[105,1129,1130],{"class":631},"addHeader",[105,1132,1086],{"class":111},[105,1134,763],{"class":125},[105,1136,169],{"class":111},[105,1138,768],{"class":125},[105,1140,1123],{"class":111},[105,1142,1143,1145,1147,1149,1152,1154,1157],{"class":107,"line":250},[105,1144,1112],{"class":111},[105,1146,1130],{"class":631},[105,1148,1086],{"class":111},[105,1150,1151],{"class":125},"\"Content-Type\"",[105,1153,169],{"class":111},[105,1155,1156],{"class":125},"\"application\u002Fjson\"",[105,1158,1123],{"class":111},[105,1160,1161,1164,1167,1170],{"class":107,"line":286},[105,1162,1163],{"class":721},"  char",[105,1165,1166],{"class":111}," buf[",[105,1168,1169],{"class":118},"192",[105,1171,1172],{"class":111},"];\n",[105,1174,1175,1178,1181,1184],{"class":107,"line":292},[105,1176,1177],{"class":631},"  snprintf",[105,1179,1180],{"class":111},"(buf, ",[105,1182,1183],{"class":721},"sizeof",[105,1185,1186],{"class":111},"(buf),\n",[105,1188,1189,1192,1195,1197,1199,1201,1203,1206,1208,1211,1213,1215,1217,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244,1247,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1279],{"class":107,"line":704},[105,1190,1191],{"class":125},"    \"{",[105,1193,1194],{"class":118},"\\\"",[105,1196,307],{"class":125},[105,1198,1194],{"class":118},[105,1200,418],{"class":125},[105,1202,1194],{"class":118},[105,1204,1205],{"class":125},"fridge01",[105,1207,1194],{"class":118},[105,1209,1210],{"class":125},",",[105,1212,1194],{"class":118},[105,1214,322],{"class":125},[105,1216,1194],{"class":118},[105,1218,1219],{"class":125},":[{",[105,1221,1194],{"class":118},[105,1223,330],{"class":125},[105,1225,1194],{"class":118},[105,1227,418],{"class":125},[105,1229,1194],{"class":118},[105,1231,334],{"class":125},[105,1233,1194],{"class":118},[105,1235,1210],{"class":125},[105,1237,1194],{"class":118},[105,1239,384],{"class":125},[105,1241,1194],{"class":118},[105,1243,418],{"class":125},[105,1245,1246],{"class":118},"%.2f",[105,1248,1249],{"class":125},"},{",[105,1251,1194],{"class":118},[105,1253,330],{"class":125},[105,1255,1194],{"class":118},[105,1257,418],{"class":125},[105,1259,1194],{"class":118},[105,1261,338],{"class":125},[105,1263,1194],{"class":118},[105,1265,1210],{"class":125},[105,1267,1194],{"class":118},[105,1269,384],{"class":125},[105,1271,1194],{"class":118},[105,1273,418],{"class":125},[105,1275,1246],{"class":118},[105,1277,1278],{"class":125},"}]}\"",[105,1280,129],{"class":111},[105,1282,1283],{"class":107,"line":863},[105,1284,1285],{"class":111},"    t, h);\n",[105,1287,1288,1291,1294,1296,1299,1302,1305,1308,1311,1314],{"class":107,"line":869},[105,1289,1290],{"class":721},"  int",[105,1292,1293],{"class":111}," code ",[105,1295,739],{"class":721},[105,1297,1298],{"class":111}," http.",[105,1300,1301],{"class":631},"POST",[105,1303,1304],{"class":111},"((",[105,1306,1307],{"class":721},"uint8_t*",[105,1309,1310],{"class":111},")buf, ",[105,1312,1313],{"class":631},"strlen",[105,1315,1316],{"class":111},"(buf));\n",[105,1318,1319,1321,1324],{"class":107,"line":882},[105,1320,1112],{"class":111},[105,1322,1323],{"class":631},"end",[105,1325,1326],{"class":111},"();\n",[105,1328,1329],{"class":107,"line":888},[105,1330,295],{"class":111},[618,1332,1333],{"v-slot:tab-4":101},[96,1334,1338],{"className":1335,"code":1336,"language":1337,"meta":101,"style":101},"language-http shiki shiki-themes github-dark github-dark","POST \u002Fv1\u002Fingest HTTP\u002F1.1\nHost: api.opensense.murzin.digital\nAuthorization: Bearer ds_live_4f3c…\nContent-Type: application\u002Fjson\nContent-Length: 142\n\n{\"device\":\"fridge01\",\"ts\":\"2026-05-17T08:22:00Z\",\"measurements\":[{\"type\":\"temperature\",\"value\":4.2},{\"type\":\"humidity\",\"value\":64.1}]}\n","http",[60,1339,1340,1356,1366,1375,1384,1394,1398],{"__ignoreMap":101},[105,1341,1342,1344,1347,1350,1353],{"class":107,"line":108},[105,1343,1301],{"class":721},[105,1345,1346],{"class":111}," \u002Fv1\u002Fingest ",[105,1348,1349],{"class":721},"HTTP",[105,1351,1352],{"class":111},"\u002F",[105,1354,1355],{"class":118},"1.1\n",[105,1357,1358,1361,1363],{"class":107,"line":115},[105,1359,1360],{"class":905},"Host",[105,1362,418],{"class":721},[105,1364,1365],{"class":125}," api.opensense.murzin.digital\n",[105,1367,1368,1370,1372],{"class":107,"line":132},[105,1369,62],{"class":905},[105,1371,418],{"class":721},[105,1373,1374],{"class":125}," Bearer ds_live_4f3c…\n",[105,1376,1377,1379,1381],{"class":107,"line":146},[105,1378,75],{"class":905},[105,1380,418],{"class":721},[105,1382,1383],{"class":125}," application\u002Fjson\n",[105,1385,1386,1389,1391],{"class":107,"line":155},[105,1387,1388],{"class":905},"Content-Length",[105,1390,418],{"class":721},[105,1392,1393],{"class":125}," 142\n",[105,1395,1396],{"class":107,"line":194},[105,1397,1075],{"emptyLinePlaceholder":1074},[105,1399,1400,1402,1405,1407,1409,1411,1414,1416,1418,1420,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455],{"class":107,"line":226},[105,1401,760],{"class":111},[105,1403,1404],{"class":118},"\"device\"",[105,1406,418],{"class":111},[105,1408,126],{"class":125},[105,1410,1210],{"class":111},[105,1412,1413],{"class":118},"\"ts\"",[105,1415,418],{"class":111},[105,1417,141],{"class":125},[105,1419,1210],{"class":111},[105,1421,1422],{"class":118},"\"measurements\"",[105,1424,1219],{"class":111},[105,1426,161],{"class":118},[105,1428,418],{"class":111},[105,1430,166],{"class":125},[105,1432,1210],{"class":111},[105,1434,172],{"class":118},[105,1436,418],{"class":111},[105,1438,177],{"class":118},[105,1440,1249],{"class":111},[105,1442,161],{"class":118},[105,1444,418],{"class":111},[105,1446,235],{"class":125},[105,1448,1210],{"class":111},[105,1450,172],{"class":118},[105,1452,418],{"class":111},[105,1454,245],{"class":118},[105,1456,1457],{"class":111},"}]}\n",[14,1459,1461],{"id":1460},"idempotency","Idempotency",[10,1463,1464,1465,1469,1470,1473,1474,393],{},"This endpoint is ",[1466,1467,1468],"strong",{},"content-idempotent",": a duplicate ",[60,1471,1472],{},"(device, ts, type, label)","\nis a no-op. You can safely retry a request without setting ",[60,1475,1476],{},"Idempotency-Key",[10,1478,1479,1480,1483,1484,1486],{},"For at-most-once accounting in your ",[1466,1481,1482],{},"client"," code (e.g. you keep a queue\nand want to know whether a specific batch landed), set ",[60,1485,1476],{},"\nexplicitly; the response is cached for 24 h.",[14,1488,1490],{"id":1489},"errors","Errors",[36,1492,1493,1506],{},[39,1494,1495],{},[42,1496,1497,1499,1503],{},[45,1498,1349],{},[45,1500,1501],{},[60,1502,60],{},[45,1504,1505],{},"When",[52,1507,1508,1521,1536,1549,1565,1581,1593],{},[42,1509,1510,1513,1518],{},[57,1511,1512],{},"400",[57,1514,1515],{},[60,1516,1517],{},"bad_json",[57,1519,1520],{},"Body is not valid JSON",[42,1522,1523,1525,1530],{},[57,1524,1512],{},[57,1526,1527],{},[60,1528,1529],{},"no_measurements",[57,1531,1532,1533,1535],{},"Body parsed but ",[60,1534,322],{}," array is empty",[42,1537,1538,1541,1546],{},[57,1539,1540],{},"401",[57,1542,1543],{},[60,1544,1545],{},"token_invalid",[57,1547,1548],{},"Authorization header missing or wrong",[42,1550,1551,1554,1559],{},[57,1552,1553],{},"403",[57,1555,1556],{},[60,1557,1558],{},"device_not_in_token",[57,1560,1561,1562,1564],{},"Device token does not own ",[60,1563,307],{}," field",[42,1566,1567,1570,1575],{},[57,1568,1569],{},"422",[57,1571,1572],{},[60,1573,1574],{},"unknown_kind",[57,1576,1577,1578,1580],{},"A ",[60,1579,330],{}," value is not in the supported set",[42,1582,1583,1585,1590],{},[57,1584,1569],{},[57,1586,1587],{},[60,1588,1589],{},"out_of_range",[57,1591,1592],{},"Sanity check failed (e.g. T = +900 °C)",[42,1594,1595,1598,1603],{},[57,1596,1597],{},"429",[57,1599,1600],{},[60,1601,1602],{},"rate_limited",[57,1604,1605],{},"Exceeded 60 req \u002F min on this device",[10,1607,1608],{},"Sanity ranges (rejected at ingest):",[36,1610,1611,1624],{},[39,1612,1613],{},[42,1614,1615,1618,1621],{},[45,1616,1617],{},"Kind",[45,1619,1620],{},"Min",[45,1622,1623],{},"Max",[52,1625,1626,1636,1646,1656,1666,1676,1686,1696,1706,1717],{},[42,1627,1628,1630,1633],{},[57,1629,334],{},[57,1631,1632],{},"−80 °C",[57,1634,1635],{},"+200 °C",[42,1637,1638,1640,1643],{},[57,1639,338],{},[57,1641,1642],{},"0 %",[57,1644,1645],{},"100 %",[42,1647,1648,1650,1653],{},[57,1649,342],{},[57,1651,1652],{},"300 hPa",[57,1654,1655],{},"1100 hPa",[42,1657,1658,1660,1663],{},[57,1659,346],{},[57,1661,1662],{},"0 ppm",[57,1664,1665],{},"10 000 ppm",[42,1667,1668,1670,1673],{},[57,1669,350],{},[57,1671,1672],{},"0 V",[57,1674,1675],{},"1000 V",[42,1677,1678,1680,1683],{},[57,1679,354],{},[57,1681,1682],{},"−500 A",[57,1684,1685],{},"+500 A",[42,1687,1688,1690,1693],{},[57,1689,358],{},[57,1691,1692],{},"−50 kW",[57,1694,1695],{},"+50 kW",[42,1697,1698,1701,1703],{},[57,1699,1700],{},"battery (%)",[57,1702,388],{},[57,1704,1705],{},"100",[42,1707,1708,1711,1714],{},[57,1709,1710],{},"battery (V)",[57,1712,1713],{},"0.5",[57,1715,1716],{},"60",[42,1718,1719,1721,1724],{},[57,1720,378],{},[57,1722,1723],{},"−150 dBm",[57,1725,1726],{},"0 dBm",[10,1728,1729],{},"Out-of-range values are rejected, not clamped. We will not silently absorb\na sensor failure into a \"real\" reading.",[1731,1732,1733],"style",{},"html pre.shiki code .suv1-, html code.shiki .suv1-{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .s8ozJ, html code.shiki .s8ozJ{--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .s4wv1, html code.shiki .s4wv1{--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}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 .sFR8T, html code.shiki .sFR8T{--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sOPea, html code.shiki .sOPea{--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .s-3mD, html code.shiki .s-3mD{--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sxg3X, html code.shiki .sxg3X{--shiki-default:#85E89D;--shiki-dark:#85E89D}",{"title":101,"searchDepth":132,"depth":132,"links":1735},[1736,1737,1738,1739,1740,1741,1742],{"id":16,"depth":115,"text":17},{"id":33,"depth":115,"text":34},{"id":93,"depth":115,"text":94},{"id":411,"depth":115,"text":412},{"id":611,"depth":115,"text":612},{"id":1460,"depth":115,"text":1461},{"id":1489,"depth":115,"text":1490},"The single endpoint every device hits",null,"md",{},"\u002Fapi\u002Fingest",{"title":5,"description":1743},"api\u002Fingest",210,"fmjjJFakXzAJ0V1rlPhGZ2yhGRyzA5hy4hMJBbYPRok",1779022953952]