[{"data":1,"prerenderedAt":1271},["ShallowReactive",2],{"docs-page-\u002Fdocs\u002Fhttp-api":3,"docs-surround-\u002Fdocs\u002Fhttp-api":1266},{"id":4,"title":5,"body":6,"description":1259,"extension":1260,"meta":1261,"navigation":434,"path":1262,"seo":1263,"stem":1264,"__hash__":1265},"docs\u002Fdocs\u002F8.http-api.md","HTTP API",{"type":7,"value":8,"toc":1248},"minimark",[9,13,23,26,34,39,46,56,71,77,84,175,264,268,271,380,384,405,408,839,842,908,912,918,1065,1070,1137,1141,1144,1199,1208,1211,1234,1244],[10,11,5],"h1",{"id":12},"http-api",[14,15,16,17,22],"p",{},"The ",[18,19,21],"a",{"href":20},"\u002Fdocs\u002Fgetting-started","Node.js SDK"," does all of this for you: encryption, queuing, retries and authentication. This page is for sending logs from anywhere else, in any language with AES-256-GCM.",[14,24,25],{},"Sending logs is the only public part of the API. Reading them back happens in the Lumber apps, which decrypt them on your own devices; the rest of the API serves those apps and can change without notice.",[14,27,28,29,33],{},"The base URL is ",[30,31,32],"code",{},"https:\u002F\u002Fapi.lumber.infinitetoken.com",".",[35,36,38],"h2",{"id":37},"authentication","Authentication",[14,40,41,42,45],{},"Send the token from an app's API key, the part before the dot, in the ",[30,43,44],{},"Authorization"," header:",[47,48,53],"pre",{"className":49,"code":51,"language":52},[50],"language-text","Authorization: Bearer \u003Ctoken>\n","text",[30,54,51],{"__ignoreMap":55},"",[14,57,58,62,63,66,67,33],{},[59,60,61],"strong",{},"Never send the part after the dot."," It's the app's encryption key, which you use to encrypt each log yourself. API keys are created in the Lumber app on your app's ",[59,64,65],{},"Secrets"," screen. See ",[18,68,70],{"href":69},"\u002Fdocs\u002Fapi-keys","API Keys",[35,72,74],{"id":73},"post-logs",[30,75,76],{},"POST \u002Flogs",[14,78,79,80,83],{},"Sends one log. There's no batch format: send one request per log, as JSON with a ",[30,81,82],{},"Content-Type: application\u002Fjson"," header.",[47,85,89],{"className":86,"code":87,"language":88,"meta":55,"style":55},"language-json shiki shiki-themes github-dark","{\n  \"level\": 3,\n  \"encrypted\": {\n    \"nonce\": \"base64encodedNonce\",\n    \"payload\": \"base64encodedAuthTagAndCiphertext\",\n    \"keyVersion\": 1\n  }\n}\n","json",[30,90,91,100,116,125,139,152,163,169],{"__ignoreMap":55},[92,93,96],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"s95oV","{\n",[92,101,103,107,110,113],{"class":94,"line":102},2,[92,104,106],{"class":105},"sDLfK","  \"level\"",[92,108,109],{"class":98},": ",[92,111,112],{"class":105},"3",[92,114,115],{"class":98},",\n",[92,117,119,122],{"class":94,"line":118},3,[92,120,121],{"class":105},"  \"encrypted\"",[92,123,124],{"class":98},": {\n",[92,126,128,131,133,137],{"class":94,"line":127},4,[92,129,130],{"class":105},"    \"nonce\"",[92,132,109],{"class":98},[92,134,136],{"class":135},"sU2Wk","\"base64encodedNonce\"",[92,138,115],{"class":98},[92,140,142,145,147,150],{"class":94,"line":141},5,[92,143,144],{"class":105},"    \"payload\"",[92,146,109],{"class":98},[92,148,149],{"class":135},"\"base64encodedAuthTagAndCiphertext\"",[92,151,115],{"class":98},[92,153,155,158,160],{"class":94,"line":154},6,[92,156,157],{"class":105},"    \"keyVersion\"",[92,159,109],{"class":98},[92,161,162],{"class":105},"1\n",[92,164,166],{"class":94,"line":165},7,[92,167,168],{"class":98},"  }\n",[92,170,172],{"class":94,"line":171},8,[92,173,174],{"class":98},"}\n",[176,177,178,194],"table",{},[179,180,181],"thead",{},[182,183,184,188,191],"tr",{},[185,186,187],"th",{},"Field",[185,189,190],{},"Type",[185,192,193],{},"Description",[195,196,197,218,233,247],"tbody",{},[182,198,199,205,210],{},[200,201,202],"td",{},[30,203,204],{},"level",[200,206,207],{},[30,208,209],{},"number",[200,211,212,213,217],{},"The log's level (see ",[18,214,216],{"href":215},"#log-levels","Log levels","). The one field Lumber can read, for filtering and push alerts",[182,219,220,225,230],{},[200,221,222],{},[30,223,224],{},"encrypted.nonce",[200,226,227],{},[30,228,229],{},"string",[200,231,232],{},"Base64 of the 12-byte nonce",[182,234,235,240,244],{},[200,236,237],{},[30,238,239],{},"encrypted.payload",[200,241,242],{},[30,243,229],{},[200,245,246],{},"Base64 of the 16-byte authentication tag followed by the ciphertext",[182,248,249,254,258],{},[200,250,251],{},[30,252,253],{},"encrypted.keyVersion",[200,255,256],{},[30,257,209],{},[200,259,260,261],{},"Always ",[30,262,263],{},"1",[35,265,267],{"id":266},"the-payload","The payload",[14,269,270],{},"What's encrypted is a JSON object with the log's content:",[176,272,273,283],{},[179,274,275],{},[182,276,277,279,281],{},[185,278,187],{},[185,280,190],{},[185,282,193],{},[195,284,285,298,312,326,340,366],{},[182,286,287,291,295],{},[200,288,289],{},[30,290,204],{},[200,292,293],{},[30,294,209],{},[200,296,297],{},"The log's level, the same as the body's",[182,299,300,305,309],{},[200,301,302],{},[30,303,304],{},"message",[200,306,307],{},[30,308,229],{},[200,310,311],{},"The log line",[182,313,314,319,323],{},[200,315,316],{},[30,317,318],{},"requestId",[200,320,321],{},[30,322,229],{},[200,324,325],{},"Optional. Ties the log to one request; the Lumber app shows it under IDs",[182,327,328,333,337],{},[200,329,330],{},[30,331,332],{},"traceId",[200,334,335],{},[30,336,229],{},[200,338,339],{},"Optional. A distributed trace's identifier, also under IDs",[182,341,342,347,352],{},[200,343,344],{},[30,345,346],{},"context",[200,348,349],{},[30,350,351],{},"object",[200,353,354,355,358,359,358,362,365],{},"Optional. Where the log came from (the SDK sends ",[30,356,357],{},"pid",", ",[30,360,361],{},"hostname",[30,363,364],{},"env",", and the caller's file and line when enabled)",[182,367,368,373,377],{},[200,369,370],{},[30,371,372],{},"metadata",[200,374,375],{},[30,376,351],{},[200,378,379],{},"Optional. Anything else about the log",[35,381,383],{"id":382},"encrypting-it","Encrypting it",[385,386,387,391,394,402],"ol",{},[388,389,390],"li",{},"Split the API key at the dot: the token, then the encryption key, base64 for 32 bytes",[388,392,393],{},"Make a random 12-byte nonce for each log, and never reuse one with the same key",[388,395,396,397,401],{},"Encrypt the payload's JSON with ",[18,398,400],{"href":399},"\u002Fdocs\u002Fencryption","AES-256-GCM",", the key and the nonce, which gives the ciphertext and a 16-byte authentication tag",[388,403,404],{},"Send the nonce, and the tag followed by the ciphertext, each base64-encoded",[14,406,407],{},"In Node.js without the SDK, for example:",[47,409,413],{"className":410,"code":411,"language":412,"meta":55,"style":55},"language-javascript shiki shiki-themes github-dark","import { createCipheriv, randomBytes } from 'node:crypto'\n\nconst [token, encryptionKey] = process.env.LUMBER_API_KEY.split('.')\nconst key = Buffer.from(encryptionKey, 'base64')\n\nasync function sendLog(level, message, fields = {}) {\n  const nonce = randomBytes(12)\n  const cipher = createCipheriv('aes-256-gcm', key, nonce)\n  const ciphertext = Buffer.concat([cipher.update(JSON.stringify({ level, message, ...fields })), cipher.final()])\n  const payload = Buffer.concat([cipher.getAuthTag(), ciphertext])\n\n  const res = await fetch('https:\u002F\u002Fapi.lumber.infinitetoken.com\u002Flogs', {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify({ level, encrypted: { nonce: nonce.toString('base64'), payload: payload.toString('base64'), keyVersion: 1 } }),\n  })\n  if (!res.ok) throw new Error(`Lumber answered ${res.status}`)\n}\n\nawait sendLog(3, 'Payment failed', { requestId: 'req-42', metadata: { amount: 1200 } })\n","javascript",[30,414,415,430,436,479,502,506,536,556,576,622,644,649,673,684,711,750,756,797,802,807],{"__ignoreMap":55},[92,416,417,421,424,427],{"class":94,"line":95},[92,418,420],{"class":419},"snl16","import",[92,422,423],{"class":98}," { createCipheriv, randomBytes } ",[92,425,426],{"class":419},"from",[92,428,429],{"class":135}," 'node:crypto'\n",[92,431,432],{"class":94,"line":102},[92,433,435],{"emptyLinePlaceholder":434},true,"\n",[92,437,438,441,444,447,449,452,455,458,461,464,466,470,473,476],{"class":94,"line":118},[92,439,440],{"class":419},"const",[92,442,443],{"class":98}," [",[92,445,446],{"class":105},"token",[92,448,358],{"class":98},[92,450,451],{"class":105},"encryptionKey",[92,453,454],{"class":98},"] ",[92,456,457],{"class":419},"=",[92,459,460],{"class":98}," process.env.",[92,462,463],{"class":105},"LUMBER_API_KEY",[92,465,33],{"class":98},[92,467,469],{"class":468},"svObZ","split",[92,471,472],{"class":98},"(",[92,474,475],{"class":135},"'.'",[92,477,478],{"class":98},")\n",[92,480,481,483,486,489,492,494,497,500],{"class":94,"line":127},[92,482,440],{"class":419},[92,484,485],{"class":105}," key",[92,487,488],{"class":419}," =",[92,490,491],{"class":98}," Buffer.",[92,493,426],{"class":468},[92,495,496],{"class":98},"(encryptionKey, ",[92,498,499],{"class":135},"'base64'",[92,501,478],{"class":98},[92,503,504],{"class":94,"line":141},[92,505,435],{"emptyLinePlaceholder":434},[92,507,508,511,514,517,519,522,524,526,528,531,533],{"class":94,"line":154},[92,509,510],{"class":419},"async",[92,512,513],{"class":419}," function",[92,515,516],{"class":468}," sendLog",[92,518,472],{"class":98},[92,520,204],{"class":521},"s9osk",[92,523,358],{"class":98},[92,525,304],{"class":521},[92,527,358],{"class":98},[92,529,530],{"class":521},"fields",[92,532,488],{"class":419},[92,534,535],{"class":98}," {}) {\n",[92,537,538,541,544,546,549,551,554],{"class":94,"line":165},[92,539,540],{"class":419},"  const",[92,542,543],{"class":105}," nonce",[92,545,488],{"class":419},[92,547,548],{"class":468}," randomBytes",[92,550,472],{"class":98},[92,552,553],{"class":105},"12",[92,555,478],{"class":98},[92,557,558,560,563,565,568,570,573],{"class":94,"line":171},[92,559,540],{"class":419},[92,561,562],{"class":105}," cipher",[92,564,488],{"class":419},[92,566,567],{"class":468}," createCipheriv",[92,569,472],{"class":98},[92,571,572],{"class":135},"'aes-256-gcm'",[92,574,575],{"class":98},", key, nonce)\n",[92,577,579,581,584,586,588,591,594,597,599,602,604,607,610,613,616,619],{"class":94,"line":578},9,[92,580,540],{"class":419},[92,582,583],{"class":105}," ciphertext",[92,585,488],{"class":419},[92,587,491],{"class":98},[92,589,590],{"class":468},"concat",[92,592,593],{"class":98},"([cipher.",[92,595,596],{"class":468},"update",[92,598,472],{"class":98},[92,600,601],{"class":105},"JSON",[92,603,33],{"class":98},[92,605,606],{"class":468},"stringify",[92,608,609],{"class":98},"({ level, message, ",[92,611,612],{"class":419},"...",[92,614,615],{"class":98},"fields })), cipher.",[92,617,618],{"class":468},"final",[92,620,621],{"class":98},"()])\n",[92,623,625,627,630,632,634,636,638,641],{"class":94,"line":624},10,[92,626,540],{"class":419},[92,628,629],{"class":105}," payload",[92,631,488],{"class":419},[92,633,491],{"class":98},[92,635,590],{"class":468},[92,637,593],{"class":98},[92,639,640],{"class":468},"getAuthTag",[92,642,643],{"class":98},"(), ciphertext])\n",[92,645,647],{"class":94,"line":646},11,[92,648,435],{"emptyLinePlaceholder":434},[92,650,652,654,657,659,662,665,667,670],{"class":94,"line":651},12,[92,653,540],{"class":419},[92,655,656],{"class":105}," res",[92,658,488],{"class":419},[92,660,661],{"class":419}," await",[92,663,664],{"class":468}," fetch",[92,666,472],{"class":98},[92,668,669],{"class":135},"'https:\u002F\u002Fapi.lumber.infinitetoken.com\u002Flogs'",[92,671,672],{"class":98},", {\n",[92,674,676,679,682],{"class":94,"line":675},13,[92,677,678],{"class":98},"    method: ",[92,680,681],{"class":135},"'POST'",[92,683,115],{"class":98},[92,685,687,690,693,695,698,700,703,705,708],{"class":94,"line":686},14,[92,688,689],{"class":98},"    headers: { Authorization: ",[92,691,692],{"class":135},"`Bearer ${",[92,694,446],{"class":98},[92,696,697],{"class":135},"}`",[92,699,358],{"class":98},[92,701,702],{"class":135},"'Content-Type'",[92,704,109],{"class":98},[92,706,707],{"class":135},"'application\u002Fjson'",[92,709,710],{"class":98}," },\n",[92,712,714,717,719,721,723,726,729,731,733,736,738,740,742,745,747],{"class":94,"line":713},15,[92,715,716],{"class":98},"    body: ",[92,718,601],{"class":105},[92,720,33],{"class":98},[92,722,606],{"class":468},[92,724,725],{"class":98},"({ level, encrypted: { nonce: nonce.",[92,727,728],{"class":468},"toString",[92,730,472],{"class":98},[92,732,499],{"class":135},[92,734,735],{"class":98},"), payload: payload.",[92,737,728],{"class":468},[92,739,472],{"class":98},[92,741,499],{"class":135},[92,743,744],{"class":98},"), keyVersion: ",[92,746,263],{"class":105},[92,748,749],{"class":98}," } }),\n",[92,751,753],{"class":94,"line":752},16,[92,754,755],{"class":98},"  })\n",[92,757,759,762,765,768,771,774,777,780,782,785,788,790,793,795],{"class":94,"line":758},17,[92,760,761],{"class":419},"  if",[92,763,764],{"class":98}," (",[92,766,767],{"class":419},"!",[92,769,770],{"class":98},"res.ok) ",[92,772,773],{"class":419},"throw",[92,775,776],{"class":419}," new",[92,778,779],{"class":468}," Error",[92,781,472],{"class":98},[92,783,784],{"class":135},"`Lumber answered ${",[92,786,787],{"class":98},"res",[92,789,33],{"class":135},[92,791,792],{"class":98},"status",[92,794,697],{"class":135},[92,796,478],{"class":98},[92,798,800],{"class":94,"line":799},18,[92,801,174],{"class":98},[92,803,805],{"class":94,"line":804},19,[92,806,435],{"emptyLinePlaceholder":434},[92,808,810,813,815,817,819,821,824,827,830,833,836],{"class":94,"line":809},20,[92,811,812],{"class":419},"await",[92,814,516],{"class":468},[92,816,472],{"class":98},[92,818,112],{"class":105},[92,820,358],{"class":98},[92,822,823],{"class":135},"'Payment failed'",[92,825,826],{"class":98},", { requestId: ",[92,828,829],{"class":135},"'req-42'",[92,831,832],{"class":98},", metadata: { amount: ",[92,834,835],{"class":105},"1200",[92,837,838],{"class":98}," } })\n",[35,840,216],{"id":841},"log-levels",[176,843,844,854],{},[179,845,846],{},[182,847,848,851],{},[185,849,850],{},"Value",[185,852,853],{},"Name",[195,855,856,866,879,889,898],{},[182,857,858,863],{},[200,859,860],{},[30,861,862],{},"0",[200,864,865],{},"debug",[182,867,868,872],{},[200,869,870],{},[30,871,263],{},[200,873,874,875,878],{},"info (default for ",[30,876,877],{},"lumber.log()",")",[182,880,881,886],{},[200,882,883],{},[30,884,885],{},"2",[200,887,888],{},"warn",[182,890,891,895],{},[200,892,893],{},[30,894,112],{},[200,896,897],{},"error",[182,899,900,905],{},[200,901,902],{},[30,903,904],{},"4",[200,906,907],{},"fatal",[35,909,911],{"id":910},"response","Response",[14,913,914,917],{},[30,915,916],{},"201 Created"," with the stored record:",[47,919,921],{"className":86,"code":920,"language":88,"meta":55,"style":55},"{\n  \"data\": {\n    \"id\": \"6f1c2a9e-...\",\n    \"appId\": \"0b7d4e12-...\",\n    \"level\": 2,\n    \"encrypted\": {\n      \"nonce\": \"base64encodedIV\",\n      \"payload\": \"base64encodedAuthTagAndCiphertext\",\n      \"keyVersion\": 1\n    },\n    \"createdAt\": \"2026-10-15T14:32:01.452Z\"\n  },\n  \"metadata\": {\n    \"requestId\": \"a3e1c7d0-...\",\n    \"durationMs\": 12\n  }\n}\n",[30,922,923,927,934,946,958,969,976,988,999,1008,1013,1023,1028,1035,1047,1057,1061],{"__ignoreMap":55},[92,924,925],{"class":94,"line":95},[92,926,99],{"class":98},[92,928,929,932],{"class":94,"line":102},[92,930,931],{"class":105},"  \"data\"",[92,933,124],{"class":98},[92,935,936,939,941,944],{"class":94,"line":118},[92,937,938],{"class":105},"    \"id\"",[92,940,109],{"class":98},[92,942,943],{"class":135},"\"6f1c2a9e-...\"",[92,945,115],{"class":98},[92,947,948,951,953,956],{"class":94,"line":127},[92,949,950],{"class":105},"    \"appId\"",[92,952,109],{"class":98},[92,954,955],{"class":135},"\"0b7d4e12-...\"",[92,957,115],{"class":98},[92,959,960,963,965,967],{"class":94,"line":141},[92,961,962],{"class":105},"    \"level\"",[92,964,109],{"class":98},[92,966,885],{"class":105},[92,968,115],{"class":98},[92,970,971,974],{"class":94,"line":154},[92,972,973],{"class":105},"    \"encrypted\"",[92,975,124],{"class":98},[92,977,978,981,983,986],{"class":94,"line":165},[92,979,980],{"class":105},"      \"nonce\"",[92,982,109],{"class":98},[92,984,985],{"class":135},"\"base64encodedIV\"",[92,987,115],{"class":98},[92,989,990,993,995,997],{"class":94,"line":171},[92,991,992],{"class":105},"      \"payload\"",[92,994,109],{"class":98},[92,996,149],{"class":135},[92,998,115],{"class":98},[92,1000,1001,1004,1006],{"class":94,"line":578},[92,1002,1003],{"class":105},"      \"keyVersion\"",[92,1005,109],{"class":98},[92,1007,162],{"class":105},[92,1009,1010],{"class":94,"line":624},[92,1011,1012],{"class":98},"    },\n",[92,1014,1015,1018,1020],{"class":94,"line":646},[92,1016,1017],{"class":105},"    \"createdAt\"",[92,1019,109],{"class":98},[92,1021,1022],{"class":135},"\"2026-10-15T14:32:01.452Z\"\n",[92,1024,1025],{"class":94,"line":651},[92,1026,1027],{"class":98},"  },\n",[92,1029,1030,1033],{"class":94,"line":675},[92,1031,1032],{"class":105},"  \"metadata\"",[92,1034,124],{"class":98},[92,1036,1037,1040,1042,1045],{"class":94,"line":686},[92,1038,1039],{"class":105},"    \"requestId\"",[92,1041,109],{"class":98},[92,1043,1044],{"class":135},"\"a3e1c7d0-...\"",[92,1046,115],{"class":98},[92,1048,1049,1052,1054],{"class":94,"line":713},[92,1050,1051],{"class":105},"    \"durationMs\"",[92,1053,109],{"class":98},[92,1055,1056],{"class":105},"12\n",[92,1058,1059],{"class":94,"line":752},[92,1060,168],{"class":98},[92,1062,1063],{"class":94,"line":758},[92,1064,174],{"class":98},[1066,1067,1069],"h3",{"id":1068},"errors","Errors",[176,1071,1072,1081],{},[179,1073,1074],{},[182,1075,1076,1079],{},[185,1077,1078],{},"Status",[185,1080,193],{},[195,1082,1083,1104,1117,1127],{},[182,1084,1085,1090],{},[200,1086,1087],{},[30,1088,1089],{},"400",[200,1091,1092,1093,358,1095,358,1098,358,1100,358,1102,878],{},"Malformed JSON, or a missing or invalid field (",[30,1094,204],{},[30,1096,1097],{},"encrypted",[30,1099,224],{},[30,1101,239],{},[30,1103,253],{},[182,1105,1106,1111],{},[200,1107,1108],{},[30,1109,1110],{},"401",[200,1112,1113,1114,1116],{},"Missing ",[30,1115,44],{}," header, or an invalid or deleted API key",[182,1118,1119,1124],{},[200,1120,1121],{},[30,1122,1123],{},"413",[200,1125,1126],{},"Request body larger than 100 KB",[182,1128,1129,1134],{},[200,1130,1131],{},[30,1132,1133],{},"500",[200,1135,1136],{},"Server error",[35,1138,1140],{"id":1139},"response-format","Response format",[14,1142,1143],{},"Successful responses use a consistent envelope:",[47,1145,1147],{"className":86,"code":1146,"language":88,"meta":55,"style":55},"{\n  \"data\": { ... },\n  \"metadata\": {\n    \"requestId\": \"string\",\n    \"durationMs\": 0\n  }\n}\n",[30,1148,1149,1153,1165,1171,1182,1191,1195],{"__ignoreMap":55},[92,1150,1151],{"class":94,"line":95},[92,1152,99],{"class":98},[92,1154,1155,1157,1160,1163],{"class":94,"line":102},[92,1156,931],{"class":105},[92,1158,1159],{"class":98},": { ",[92,1161,612],{"class":1162},"s6RL2",[92,1164,710],{"class":98},[92,1166,1167,1169],{"class":94,"line":118},[92,1168,1032],{"class":105},[92,1170,124],{"class":98},[92,1172,1173,1175,1177,1180],{"class":94,"line":127},[92,1174,1039],{"class":105},[92,1176,109],{"class":98},[92,1178,1179],{"class":135},"\"string\"",[92,1181,115],{"class":98},[92,1183,1184,1186,1188],{"class":94,"line":141},[92,1185,1051],{"class":105},[92,1187,109],{"class":98},[92,1189,1190],{"class":105},"0\n",[92,1192,1193],{"class":94,"line":154},[92,1194,168],{"class":98},[92,1196,1197],{"class":94,"line":165},[92,1198,174],{"class":98},[14,1200,1201,1203,1204,1207],{},[30,1202,318],{}," echoes the ",[30,1205,1206],{},"X-Request-Id"," request header when you send one, and is a generated UUID otherwise.",[14,1209,1210],{},"Error responses use standard HTTP status codes with a JSON body containing a message:",[47,1212,1214],{"className":86,"code":1213,"language":88,"meta":55,"style":55},"{\n  \"message\": \"Invalid token\"\n}\n",[30,1215,1216,1220,1230],{"__ignoreMap":55},[92,1217,1218],{"class":94,"line":95},[92,1219,99],{"class":98},[92,1221,1222,1225,1227],{"class":94,"line":102},[92,1223,1224],{"class":105},"  \"message\"",[92,1226,109],{"class":98},[92,1228,1229],{"class":135},"\"Invalid token\"\n",[92,1231,1232],{"class":94,"line":118},[92,1233,174],{"class":98},[14,1235,1236,1237,1240,1241,33],{},"Server errors (",[30,1238,1239],{},"5xx",") always return ",[30,1242,1243],{},"{ \"message\": \"Internal Server Error\" }",[1245,1246,1247],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#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 pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .s6RL2, html code.shiki .s6RL2{--shiki-default:#FDAEB7;--shiki-default-font-style:italic}",{"title":55,"searchDepth":102,"depth":102,"links":1249},[1250,1251,1252,1253,1254,1255,1258],{"id":37,"depth":102,"text":38},{"id":73,"depth":102,"text":76},{"id":266,"depth":102,"text":267},{"id":382,"depth":102,"text":383},{"id":841,"depth":102,"text":216},{"id":910,"depth":102,"text":911,"children":1256},[1257],{"id":1068,"depth":118,"text":1069},{"id":1139,"depth":102,"text":1140},"Sending logs to Lumber without the SDK: the one public endpoint, the payload, and how to encrypt it.","md",{},"\u002Fdocs\u002Fhttp-api",{"title":5,"description":1259},"docs\u002F8.http-api","8fmnmSOiOe1VYt9j1rw7zl9peAMcQ8JJeVO6-ZeKsKU",[1267,1270],{"title":1268,"path":399,"stem":1269,"children":-1},"Encryption","docs\u002F7.encryption",null,1794245210847]