[{"data":1,"prerenderedAt":1603},["ShallowReactive",2],{"docs:/docs/api-reference/errors":3},{"id":4,"title":5,"body":6,"description":1595,"extension":1596,"meta":1597,"navigation":1598,"path":1599,"seo":1600,"stem":1601,"__hash__":1602},"docs/docs/api-reference/errors.md","Error Reference",{"type":7,"value":8,"toc":1579},"minimark",[9,13,17,22,27,35,46,115,175,187,235,263,267,354,358,363,366,499,520,524,527,572,588,592,595,637,652,656,659,749,767,771,774,830,847,851,854,861,933,1060,1086,1090,1258,1262,1265,1350,1353,1357,1366,1402,1413,1417,1423,1470,1475,1521,1525,1535,1551,1555,1575],[10,11,5],"h1",{"id":12},"error-reference",[14,15,16],"p",{},"Complete reference for errors returned by the NoLag REST API and WebSocket connections.",[18,19,21],"h2",{"id":20},"rest-api-errors","REST API Errors",[23,24,26],"h3",{"id":25},"error-format","Error Format",[14,28,29,30,34],{},"REST error responses come in two shapes, depending on which layer raised the error. Read ",[31,32,33],"code",{},"message"," in both cases.",[14,36,37,41,42,45],{},[38,39,40],"strong",{},"Application errors"," (unknown resource, duplicate slug, invalid identifier, bad credentials) carry a unique ",[31,43,44],{},"id"," you can quote to support:",[47,48,49],"code-tabs",{},[50,51,57],"pre",{"className":52,"code":53,"filename":54,"language":55,"meta":56,"style":56},"language-json shiki shiki-themes github-light github-dark","{\n  \"id\": \"uuid\",\n  \"message\": \"Human-readable error description\",\n  \"timestamp\": \"2024-01-15T12:00:00Z\"\n}\n","JSON","json","",[31,58,59,68,85,98,109],{"__ignoreMap":56},[60,61,64],"span",{"class":62,"line":63},"line",1,[60,65,67],{"class":66},"sVt8B","{\n",[60,69,71,75,78,82],{"class":62,"line":70},2,[60,72,74],{"class":73},"sj4cs","  \"id\"",[60,76,77],{"class":66},": ",[60,79,81],{"class":80},"sZZnC","\"uuid\"",[60,83,84],{"class":66},",\n",[60,86,88,91,93,96],{"class":62,"line":87},3,[60,89,90],{"class":73},"  \"message\"",[60,92,77],{"class":66},[60,94,95],{"class":80},"\"Human-readable error description\"",[60,97,84],{"class":66},[60,99,101,104,106],{"class":62,"line":100},4,[60,102,103],{"class":73},"  \"timestamp\"",[60,105,77],{"class":66},[60,107,108],{"class":80},"\"2024-01-15T12:00:00Z\"\n",[60,110,112],{"class":62,"line":111},5,[60,113,114],{"class":66},"}\n",[116,117,118,134],"table",{},[119,120,121],"thead",{},[122,123,124,128,131],"tr",{},[125,126,127],"th",{},"Field",[125,129,130],{},"Type",[125,132,133],{},"Description",[135,136,137,150,162],"tbody",{},[122,138,139,144,147],{},[140,141,142],"td",{},[31,143,44],{},[140,145,146],{},"string (UUID)",[140,148,149],{},"Unique identifier for this error instance. Include this when contacting support.",[122,151,152,156,159],{},[140,153,154],{},[31,155,33],{},[140,157,158],{},"string",[140,160,161],{},"Human-readable description of what went wrong.",[122,163,164,169,172],{},[140,165,166],{},[31,167,168],{},"timestamp",[140,170,171],{},"string (ISO 8601)",[140,173,174],{},"When the error occurred.",[14,176,177,180,181,183,184,186],{},[38,178,179],{},"Framework errors"," (a key that is not project-scoped, an app outside your project, a plan limit) use the standard NestJS shape, with no ",[31,182,44],{}," or ",[31,185,168],{},":",[47,188,189],{},[50,190,192],{"className":52,"code":191,"filename":54,"language":55,"meta":56,"style":56},"{\n  \"statusCode\": 403,\n  \"message\": \"API key must be project-scoped to access this endpoint\",\n  \"error\": \"Forbidden\"\n}\n",[31,193,194,198,210,221,231],{"__ignoreMap":56},[60,195,196],{"class":62,"line":63},[60,197,67],{"class":66},[60,199,200,203,205,208],{"class":62,"line":70},[60,201,202],{"class":73},"  \"statusCode\"",[60,204,77],{"class":66},[60,206,207],{"class":73},"403",[60,209,84],{"class":66},[60,211,212,214,216,219],{"class":62,"line":87},[60,213,90],{"class":73},[60,215,77],{"class":66},[60,217,218],{"class":80},"\"API key must be project-scoped to access this endpoint\"",[60,220,84],{"class":66},[60,222,223,226,228],{"class":62,"line":100},[60,224,225],{"class":73},"  \"error\"",[60,227,77],{"class":66},[60,229,230],{"class":80},"\"Forbidden\"\n",[60,232,233],{"class":62,"line":111},[60,234,114],{"class":66},[14,236,237,240,241,244,245,248,249,252,253,256,257,256,260,262],{},[38,238,239],{},"Validation errors"," are a third variant of the framework shape: a ",[31,242,243],{},"400"," with ",[31,246,247],{},"\"message\": \"Validation failed\""," and an ",[31,250,251],{},"errors"," array, one entry per failed constraint (",[31,254,255],{},"path",", ",[31,258,259],{},"value",[31,261,33],{},"). Unknown body fields fail validation rather than being ignored.",[23,264,266],{"id":265},"http-status-codes","HTTP Status Codes",[116,268,269,282],{},[119,270,271],{},[122,272,273,276,279],{},[125,274,275],{},"Status",[125,277,278],{},"Name",[125,280,281],{},"When",[135,283,284,296,309,328,341],{},[122,285,286,290,293],{},[140,287,288],{},[31,289,243],{},[140,291,292],{},"Bad Request",[140,294,295],{},"Validation failed, invalid UUID, unknown body field, room cap reached, static room deletion, scope from another project",[122,297,298,303,306],{},[140,299,300],{},[31,301,302],{},"401",[140,304,305],{},"Unauthorized",[140,307,308],{},"Missing or invalid API key/token",[122,310,311,315,318],{},[140,312,313],{},[31,314,207],{},[140,316,317],{},"Forbidden",[140,319,320,321,324,325],{},"API key is not project-scoped, plan app limit reached, ",[31,322,323],{},"rooms/ensure"," on an app without ",[31,326,327],{},"config.autoProvisionRooms",[122,329,330,335,338],{},[140,331,332],{},[31,333,334],{},"404",[140,336,337],{},"Not Found",[140,339,340],{},"Resource does not exist, has been deleted, or belongs to another project",[122,342,343,348,351],{},[140,344,345],{},[31,346,347],{},"409",[140,349,350],{},"Conflict",[140,352,353],{},"Duplicate slug, duplicate room grant, deleting a scope that still has actors",[23,355,357],{"id":356},"response-examples","Response Examples",[359,360,362],"h4",{"id":361},"_400-bad-request","400 Bad Request",[14,364,365],{},"Returned when the request fails validation or contains malformed data.",[47,367,368,412],{},[50,369,371],{"className":52,"code":370,"filename":54,"language":55,"meta":56,"style":56},"{\n  \"id\": \"01939f83-8b57-7c3e-a456-426614174001\",\n  \"message\": \"Invalid appId UUID format\",\n  \"timestamp\": \"2024-01-15T10:30:00.000Z\"\n}\n",[31,372,373,377,388,399,408],{"__ignoreMap":56},[60,374,375],{"class":62,"line":63},[60,376,67],{"class":66},[60,378,379,381,383,386],{"class":62,"line":70},[60,380,74],{"class":73},[60,382,77],{"class":66},[60,384,385],{"class":80},"\"01939f83-8b57-7c3e-a456-426614174001\"",[60,387,84],{"class":66},[60,389,390,392,394,397],{"class":62,"line":87},[60,391,90],{"class":73},[60,393,77],{"class":66},[60,395,396],{"class":80},"\"Invalid appId UUID format\"",[60,398,84],{"class":66},[60,400,401,403,405],{"class":62,"line":100},[60,402,103],{"class":73},[60,404,77],{"class":66},[60,406,407],{"class":80},"\"2024-01-15T10:30:00.000Z\"\n",[60,409,410],{"class":62,"line":111},[60,411,114],{"class":66},[50,413,416],{"className":52,"code":414,"filename":415,"language":55,"meta":56,"style":56},"{\n  \"message\": \"Validation failed\",\n  \"errors\": [\n    {\n      \"path\": \"actorType\",\n      \"value\": \"server\",\n      \"message\": \"actorType must be one of the following values: device, service, session, user, agent, orchestrator, observer\"\n    }\n  ]\n}\n","Validation",[31,417,418,422,433,441,446,458,471,482,488,494],{"__ignoreMap":56},[60,419,420],{"class":62,"line":63},[60,421,67],{"class":66},[60,423,424,426,428,431],{"class":62,"line":70},[60,425,90],{"class":73},[60,427,77],{"class":66},[60,429,430],{"class":80},"\"Validation failed\"",[60,432,84],{"class":66},[60,434,435,438],{"class":62,"line":87},[60,436,437],{"class":73},"  \"errors\"",[60,439,440],{"class":66},": [\n",[60,442,443],{"class":62,"line":100},[60,444,445],{"class":66},"    {\n",[60,447,448,451,453,456],{"class":62,"line":111},[60,449,450],{"class":73},"      \"path\"",[60,452,77],{"class":66},[60,454,455],{"class":80},"\"actorType\"",[60,457,84],{"class":66},[60,459,461,464,466,469],{"class":62,"line":460},6,[60,462,463],{"class":73},"      \"value\"",[60,465,77],{"class":66},[60,467,468],{"class":80},"\"server\"",[60,470,84],{"class":66},[60,472,474,477,479],{"class":62,"line":473},7,[60,475,476],{"class":73},"      \"message\"",[60,478,77],{"class":66},[60,480,481],{"class":80},"\"actorType must be one of the following values: device, service, session, user, agent, orchestrator, observer\"\n",[60,483,485],{"class":62,"line":484},8,[60,486,487],{"class":66},"    }\n",[60,489,491],{"class":62,"line":490},9,[60,492,493],{"class":66},"  ]\n",[60,495,497],{"class":62,"line":496},10,[60,498,114],{"class":66},[14,500,501,502,504,505,256,508,256,511,256,514,256,517],{},"Other ",[31,503,243],{}," messages you will meet: ",[31,506,507],{},"Invalid actorId: must be a UUID or public keyId (at_...)",[31,509,510],{},"App \u003CappId> has reached its room cap (1000)",[31,512,513],{},"Cannot delete static rooms created from Blueprint. Disable them instead.",[31,515,516],{},"Access scope \u003Cid> does not belong to this project",[31,518,519],{},"Either actorTokenId or actorType must be provided.",[359,521,523],{"id":522},"_401-unauthorized","401 Unauthorized",[14,525,526],{},"Returned when the API key is missing, malformed, or no longer valid.",[47,528,529],{},[50,530,532],{"className":52,"code":531,"filename":54,"language":55,"meta":56,"style":56},"{\n  \"id\": \"01939f83-8b57-7c3e-a456-426614174002\",\n  \"message\": \"Invalid or expired API key\",\n  \"timestamp\": \"2024-01-15T10:30:00.000Z\"\n}\n",[31,533,534,538,549,560,568],{"__ignoreMap":56},[60,535,536],{"class":62,"line":63},[60,537,67],{"class":66},[60,539,540,542,544,547],{"class":62,"line":70},[60,541,74],{"class":73},[60,543,77],{"class":66},[60,545,546],{"class":80},"\"01939f83-8b57-7c3e-a456-426614174002\"",[60,548,84],{"class":66},[60,550,551,553,555,558],{"class":62,"line":87},[60,552,90],{"class":73},[60,554,77],{"class":66},[60,556,557],{"class":80},"\"Invalid or expired API key\"",[60,559,84],{"class":66},[60,561,562,564,566],{"class":62,"line":100},[60,563,103],{"class":73},[60,565,77],{"class":66},[60,567,407],{"class":80},[60,569,570],{"class":62,"line":111},[60,571,114],{"class":66},[14,573,574,575,577,578,256,581,256,584,587],{},"Possible ",[31,576,33],{}," values: ",[31,579,580],{},"Authorization header not provided",[31,582,583],{},"Invalid or expired API key",[31,585,586],{},"Token type not allowed for this route"," (a user session token was sent to an API-key route).",[359,589,591],{"id":590},"_403-forbidden","403 Forbidden",[14,593,594],{},"Returned when the credentials are valid but lack permission to access the resource.",[47,596,597],{},[50,598,599],{"className":52,"code":191,"filename":54,"language":55,"meta":56,"style":56},[31,600,601,605,615,625,633],{"__ignoreMap":56},[60,602,603],{"class":62,"line":63},[60,604,67],{"class":66},[60,606,607,609,611,613],{"class":62,"line":70},[60,608,202],{"class":73},[60,610,77],{"class":66},[60,612,207],{"class":73},[60,614,84],{"class":66},[60,616,617,619,621,623],{"class":62,"line":87},[60,618,90],{"class":73},[60,620,77],{"class":66},[60,622,218],{"class":80},[60,624,84],{"class":66},[60,626,627,629,631],{"class":62,"line":100},[60,628,225],{"class":73},[60,630,77],{"class":66},[60,632,230],{"class":80},[60,634,635],{"class":62,"line":111},[60,636,114],{"class":66},[14,638,501,639,641,642,645,646,256,649],{},[31,640,207],{}," messages: ",[31,643,644],{},"App limit reached. Please upgrade your subscription to create more apps."," and, for ",[31,647,648],{},"POST /apps/{appId}/rooms/ensure",[31,650,651],{},"App \u003CappId> does not allow dynamic room provisioning (set config.autoProvisionRooms=true to enable). Rooms must be created explicitly; unknown rooms are rejected at the broker.",[359,653,655],{"id":654},"_404-not-found","404 Not Found",[14,657,658],{},"Returned when the requested resource does not exist, has been deleted, or belongs to a different project than the API key.",[47,660,661,705],{},[50,662,665],{"className":52,"code":663,"filename":664,"language":55,"meta":56,"style":56},"{\n  \"statusCode\": 404,\n  \"message\": \"App 01939f83-8b57-7c3e-a456-426614174000 not found in project 019e8d1e-a59b-748b-9f69-dd03a91400f8\",\n  \"error\": \"Not Found\"\n}\n","App (framework shape)",[31,666,667,671,681,692,701],{"__ignoreMap":56},[60,668,669],{"class":62,"line":63},[60,670,67],{"class":66},[60,672,673,675,677,679],{"class":62,"line":70},[60,674,202],{"class":73},[60,676,77],{"class":66},[60,678,334],{"class":73},[60,680,84],{"class":66},[60,682,683,685,687,690],{"class":62,"line":87},[60,684,90],{"class":73},[60,686,77],{"class":66},[60,688,689],{"class":80},"\"App 01939f83-8b57-7c3e-a456-426614174000 not found in project 019e8d1e-a59b-748b-9f69-dd03a91400f8\"",[60,691,84],{"class":66},[60,693,694,696,698],{"class":62,"line":100},[60,695,225],{"class":73},[60,697,77],{"class":66},[60,699,700],{"class":80},"\"Not Found\"\n",[60,702,703],{"class":62,"line":111},[60,704,114],{"class":66},[50,706,709],{"className":52,"code":707,"filename":708,"language":55,"meta":56,"style":56},"{\n  \"id\": \"01939f83-8b57-7c3e-a456-426614174004\",\n  \"message\": \"Room 01939f83-8b57-7c3e-a456-426614174003 not found\",\n  \"timestamp\": \"2024-01-15T10:30:00.000Z\"\n}\n","Room, actor, scope, grant",[31,710,711,715,726,737,745],{"__ignoreMap":56},[60,712,713],{"class":62,"line":63},[60,714,67],{"class":66},[60,716,717,719,721,724],{"class":62,"line":70},[60,718,74],{"class":73},[60,720,77],{"class":66},[60,722,723],{"class":80},"\"01939f83-8b57-7c3e-a456-426614174004\"",[60,725,84],{"class":66},[60,727,728,730,732,735],{"class":62,"line":87},[60,729,90],{"class":73},[60,731,77],{"class":66},[60,733,734],{"class":80},"\"Room 01939f83-8b57-7c3e-a456-426614174003 not found\"",[60,736,84],{"class":66},[60,738,739,741,743],{"class":62,"line":100},[60,740,103],{"class":73},[60,742,77],{"class":66},[60,744,407],{"class":80},[60,746,747],{"class":62,"line":111},[60,748,114],{"class":66},[14,750,501,751,641,753,256,756,759,760,256,763,766],{},[31,752,334],{},[31,754,755],{},"Actor token \u003Cid> not found",[31,757,758],{},"Actor token \u003Cid> not found in this project"," (grant to an actor from another project), ",[31,761,762],{},"Access scope \u003Cid> not found",[31,764,765],{},"Room grant \u003Cid> not found",".",[359,768,770],{"id":769},"_409-conflict","409 Conflict",[14,772,773],{},"Returned when a create or update would violate a uniqueness constraint.",[47,775,776],{},[50,777,779],{"className":52,"code":778,"filename":54,"language":55,"meta":56,"style":56},"{\n  \"id\": \"01939f83-8b57-7c3e-a456-426614174005\",\n  \"message\": \"Room with slug \\\"general\\\" already exists\",\n  \"timestamp\": \"2024-01-15T10:30:00.000Z\"\n}\n",[31,780,781,785,796,818,826],{"__ignoreMap":56},[60,782,783],{"class":62,"line":63},[60,784,67],{"class":66},[60,786,787,789,791,794],{"class":62,"line":70},[60,788,74],{"class":73},[60,790,77],{"class":66},[60,792,793],{"class":80},"\"01939f83-8b57-7c3e-a456-426614174005\"",[60,795,84],{"class":66},[60,797,798,800,802,805,808,811,813,816],{"class":62,"line":87},[60,799,90],{"class":73},[60,801,77],{"class":66},[60,803,804],{"class":80},"\"Room with slug ",[60,806,807],{"class":73},"\\\"",[60,809,810],{"class":80},"general",[60,812,807],{"class":73},[60,814,815],{"class":80}," already exists\"",[60,817,84],{"class":66},[60,819,820,822,824],{"class":62,"line":100},[60,821,103],{"class":73},[60,823,77],{"class":66},[60,825,407],{"class":80},[60,827,828],{"class":62,"line":111},[60,829,114],{"class":66},[14,831,501,832,641,834,837,838,256,841,256,844],{},[31,833,347],{},[31,835,836],{},"App with slug \"\u003Cslug>\" already exists in this project"," (framework shape), ",[31,839,840],{},"A scope with slug \"\u003Cslug>\" already exists in this project",[31,842,843],{},"That actor already has a grant on this room. Update it instead.",[31,845,846],{},"Cannot delete scope: \u003Cn> actor(s) are still assigned to it. Unscope them first.",[18,848,850],{"id":849},"websocket-errors","WebSocket Errors",[23,852,26],{"id":853},"error-format-1",[14,855,856,857,860],{},"WebSocket errors are delivered as ",[31,858,859],{},"error"," frames on the open connection (MessagePack encoded, shown here as JSON):",[47,862,863],{},[50,864,866],{"className":52,"code":865,"filename":54,"language":55,"meta":56,"style":56},"{\n  \"type\": \"error\",\n  \"error\": \"unknown_topic\",\n  \"code\": 42940,\n  \"topic\": \"my-app-a3f9/general/messages\",\n  \"hint\": \"room is not configured. Provision it via the control-plane rooms API before use.\"\n}\n",[31,867,868,872,884,895,907,919,929],{"__ignoreMap":56},[60,869,870],{"class":62,"line":63},[60,871,67],{"class":66},[60,873,874,877,879,882],{"class":62,"line":70},[60,875,876],{"class":73},"  \"type\"",[60,878,77],{"class":66},[60,880,881],{"class":80},"\"error\"",[60,883,84],{"class":66},[60,885,886,888,890,893],{"class":62,"line":87},[60,887,225],{"class":73},[60,889,77],{"class":66},[60,891,892],{"class":80},"\"unknown_topic\"",[60,894,84],{"class":66},[60,896,897,900,902,905],{"class":62,"line":100},[60,898,899],{"class":73},"  \"code\"",[60,901,77],{"class":66},[60,903,904],{"class":73},"42940",[60,906,84],{"class":66},[60,908,909,912,914,917],{"class":62,"line":111},[60,910,911],{"class":73},"  \"topic\"",[60,913,77],{"class":66},[60,915,916],{"class":80},"\"my-app-a3f9/general/messages\"",[60,918,84],{"class":66},[60,920,921,924,926],{"class":62,"line":460},[60,922,923],{"class":73},"  \"hint\"",[60,925,77],{"class":66},[60,927,928],{"class":80},"\"room is not configured. Provision it via the control-plane rooms API before use.\"\n",[60,930,931],{"class":62,"line":473},[60,932,114],{"class":66},[116,934,935,945],{},[119,936,937],{},[122,938,939,941,943],{},[125,940,127],{},[125,942,130],{},[125,944,133],{},[135,946,947,961,972,984,996,1011,1030,1045],{},[122,948,949,954,956],{},[140,950,951],{},[31,952,953],{},"type",[140,955,158],{},[140,957,958,959,766],{},"Always ",[31,960,881],{},[122,962,963,967,969],{},[140,964,965],{},[31,966,859],{},[140,968,158],{},[140,970,971],{},"Machine-readable error name.",[122,973,974,978,981],{},[140,975,976],{},[31,977,31],{},[140,979,980],{},"number",[140,982,983],{},"Numeric error code. Present on rate, quota, size and unknown-topic errors.",[122,985,986,991,993],{},[140,987,988],{},[31,989,990],{},"topic",[140,992,158],{},[140,994,995],{},"Optional. Included when the error relates to a specific topic.",[122,997,998,1003,1005],{},[140,999,1000],{},[31,1001,1002],{},"hint",[140,1004,158],{},[140,1006,1007,1008,766],{},"Optional. Human-readable remediation, currently sent with ",[31,1009,1010],{},"unknown_topic",[122,1012,1013,1018,1020],{},[140,1014,1015],{},[31,1016,1017],{},"msgRef",[140,1019,158],{},[140,1021,1022,1023,1025,1026,1029],{},"Optional. Echoes the ",[31,1024,1017],{}," of the ",[31,1027,1028],{},"publish"," frame that failed, so a client can settle the matching publish callback.",[122,1031,1032,1037,1039],{},[140,1033,1034],{},[31,1035,1036],{},"lobbyId",[140,1038,158],{},[140,1040,1041,1042,1044],{},"Optional. Included instead of ",[31,1043,990],{}," on lobby errors.",[122,1046,1047,1052,1054],{},[140,1048,1049],{},[31,1050,1051],{},"maxSizeBytes",[140,1053,980],{},[140,1055,1056,1057,766],{},"Optional. Included with ",[31,1058,1059],{},"message_too_large",[14,1061,1062,256,1064,1066,1067,1069,1070,1073,1074,1077,1078,1081,1082,1085],{},[31,1063,31],{},[31,1065,1002],{}," and ",[31,1068,1017],{}," are protocol v2 fields. Send ",[31,1071,1072],{},"\"protocolVersion\": 2"," in the ",[31,1075,1076],{},"auth"," frame (every current SDK does) to receive them; a v1 connection gets the legacy ",[31,1079,1080],{},"not_authorized"," frame for a denied topic and never receives ",[31,1083,1084],{},"published"," acks.",[23,1087,1089],{"id":1088},"error-codes","Error Codes",[116,1091,1092,1104],{},[119,1093,1094],{},[122,1095,1096,1099,1102],{},[125,1097,1098],{},"Code",[125,1100,1101],{},"Error",[125,1103,133],{},[135,1105,1106,1121,1136,1152,1173,1191,1206,1231,1243],{},[122,1107,1108,1113,1118],{},[140,1109,1110],{},[31,1111,1112],{},"42910",[140,1114,1115],{},[31,1116,1117],{},"rate_limit_exceeded",[140,1119,1120],{},"More than 50 publishes per second on this connection.",[122,1122,1123,1128,1133],{},[140,1124,1125],{},[31,1126,1127],{},"42920",[140,1129,1130],{},[31,1131,1132],{},"monthly_quota_exceeded",[140,1134,1135],{},"Project has exceeded its monthly message quota.",[122,1137,1138,1143,1147],{},[140,1139,1140],{},[31,1141,1142],{},"42930",[140,1144,1145],{},[31,1146,1059],{},[140,1148,1149,1150,766],{},"Payload exceeds the 900 KB ceiling (921,600 bytes, the same on every plan). The frame includes ",[31,1151,1051],{},[122,1153,1154,1158,1162],{},[140,1155,1156],{},[31,1157,904],{},[140,1159,1160],{},[31,1161,1010],{},[140,1163,1164,1165,1170,1171,766],{},"Subscribe or publish to a room that does not exist or that this actor may not access. Rooms are never created implicitly; create them via the ",[1166,1167,1169],"a",{"href":1168},"/docs/api-reference#rooms","REST API"," first. Carries ",[31,1172,1002],{},[122,1174,1175,1178,1182],{},[140,1176,1177],{},"-",[140,1179,1180],{},[31,1181,1080],{},[140,1183,1184,1185,1187,1188,766],{},"Lobby access denied (",[31,1186,1036],{}," set). Also the v1 fallback for a denied topic on connections that did not send ",[31,1189,1190],{},"protocolVersion: 2",[122,1192,1193,1195,1200],{},[140,1194,1177],{},[140,1196,1197],{},[31,1198,1199],{},"not_subscribed",[140,1201,1202,1205],{},[31,1203,1204],{},"setFilters"," on a topic this connection has not subscribed to.",[122,1207,1208,1210,1215],{},[140,1209,1177],{},[140,1211,1212],{},[31,1213,1214],{},"invalid_filter_chars (/, #, +, | not allowed)",[140,1216,1217,1218,256,1221,256,1224,183,1227,1230],{},"A filter contains ",[31,1219,1220],{},"/",[31,1222,1223],{},"#",[31,1225,1226],{},"+",[31,1228,1229],{},"|",", is an empty string, or an AND-group has fewer than two entries. The wire string includes the parenthetical.",[122,1232,1233,1235,1240],{},[140,1234,1177],{},[140,1236,1237],{},[31,1238,1239],{},"too_many_filters (max 100)",[140,1241,1242],{},"More than 100 filters specified for a topic. The wire string includes the parenthetical.",[122,1244,1245,1247,1252],{},[140,1246,1177],{},[140,1248,1249],{},[31,1250,1251],{},"not_authenticated",[140,1253,1254,1255,1257],{},"Any frame other than ",[31,1256,1076],{}," sent before authentication completed.",[23,1259,1261],{"id":1260},"close-codes","Close Codes",[14,1263,1264],{},"The server may close the WebSocket connection with a specific close code:",[116,1266,1267,1278],{},[119,1268,1269],{},[122,1270,1271,1273,1276],{},[125,1272,1098],{},[125,1274,1275],{},"Reason",[125,1277,133],{},[135,1279,1280,1311,1329],{},[122,1281,1282,1287,1304],{},[140,1283,1284],{},[31,1285,1286],{},"4001",[140,1288,1289,256,1292,256,1295,256,1298,256,1301],{},[31,1290,1291],{},"token_revoked",[31,1293,1294],{},"token_expired",[31,1296,1297],{},"token_not_found",[31,1299,1300],{},"project_not_found",[31,1302,1303],{},"scope_inactive",[140,1305,1306,1307,1310],{},"Periodic revalidation (about every 10 minutes) rejected the actor. The reason string is the close reason. No ",[31,1308,1309],{},"disconnect"," frame precedes this close.",[122,1312,1313,1318,1323],{},[140,1314,1315],{},[31,1316,1317],{},"4002",[140,1319,1320],{},[31,1321,1322],{},"connection_limit_reached",[140,1324,1325,1326,1328],{},"The organization went over its concurrent connection limit after a plan change, detected at revalidation. At connect time the same condition is reported as an ",[31,1327,1076],{}," failure frame, not a close.",[122,1330,1331,1336,1340],{},[140,1332,1333],{},[31,1334,1335],{},"4003",[140,1337,1338],{},[31,1339,1294],{},[140,1341,1342,1343,1346,1347,1349],{},"A client token (JWT) passed its ",[31,1344,1345],{},"exp",", detected at the next heartbeat. Preceded by a ",[31,1348,1309],{}," frame.",[14,1351,1352],{},"A silent connection is also closed by the server's 60-second idle timeout; send a heartbeat (empty binary frame) at least that often.",[23,1354,1356],{"id":1355},"server-initiated-disconnect","Server-Initiated Disconnect",[14,1358,1359,1360,1362,1363,1365],{},"Before a ",[31,1361,1335],{}," close the server sends a ",[31,1364,1309],{}," frame. This is the only reason the frame carries today:",[47,1367,1368],{},[50,1369,1371],{"className":52,"code":1370,"filename":54,"language":55,"meta":56,"style":56},"{\n  \"type\": \"disconnect\",\n  \"reason\": \"token_expired\"\n}\n",[31,1372,1373,1377,1388,1398],{"__ignoreMap":56},[60,1374,1375],{"class":62,"line":63},[60,1376,67],{"class":66},[60,1378,1379,1381,1383,1386],{"class":62,"line":70},[60,1380,876],{"class":73},[60,1382,77],{"class":66},[60,1384,1385],{"class":80},"\"disconnect\"",[60,1387,84],{"class":66},[60,1389,1390,1393,1395],{"class":62,"line":87},[60,1391,1392],{"class":73},"  \"reason\"",[60,1394,77],{"class":66},[60,1396,1397],{"class":80},"\"token_expired\"\n",[60,1399,1400],{"class":62,"line":100},[60,1401,114],{"class":66},[14,1403,1404,1405,1408,1409,766],{},"Renew the client token with a ",[31,1406,1407],{},"reauth"," frame before it expires to avoid this; see ",[1166,1410,1412],{"href":1411},"/docs/api-reference/websocket#reauth","WebSocket API",[23,1414,1416],{"id":1415},"authentication-errors","Authentication Errors",[14,1418,1419,1420,1422],{},"If authentication fails, the server responds with an ",[31,1421,1076],{}," frame indicating the failure and leaves the socket open; the client may retry with another token or close.",[47,1424,1425],{},[50,1426,1428],{"className":52,"code":1427,"filename":54,"language":55,"meta":56,"style":56},"{\n  \"type\": \"auth\",\n  \"success\": false,\n  \"error\": \"access_denied\"\n}\n",[31,1429,1430,1434,1445,1457,1466],{"__ignoreMap":56},[60,1431,1432],{"class":62,"line":63},[60,1433,67],{"class":66},[60,1435,1436,1438,1440,1443],{"class":62,"line":70},[60,1437,876],{"class":73},[60,1439,77],{"class":66},[60,1441,1442],{"class":80},"\"auth\"",[60,1444,84],{"class":66},[60,1446,1447,1450,1452,1455],{"class":62,"line":87},[60,1448,1449],{"class":73},"  \"success\"",[60,1451,77],{"class":66},[60,1453,1454],{"class":73},"false",[60,1456,84],{"class":66},[60,1458,1459,1461,1463],{"class":62,"line":100},[60,1460,225],{"class":73},[60,1462,77],{"class":66},[60,1464,1465],{"class":80},"\"access_denied\"\n",[60,1467,1468],{"class":62,"line":111},[60,1469,114],{"class":66},[14,1471,574,1472,1474],{},[31,1473,859],{}," values:",[1476,1477,1478,1488,1494,1500,1509,1515],"ul",{},[1479,1480,1481,1484,1485,1487],"li",{},[31,1482,1483],{},"\"access_denied\"",": the control plane rejected the token. Covers an unknown, disabled, expired or cross-project actor, a client token with a bad signature, and an actor whose scope is inactive, deleted or belongs to another project (",[31,1486,1303],{}," on the control plane; the broker does not forward the specific reason at connect).",[1479,1489,1490,1493],{},[31,1491,1492],{},"\"authentication_failed\"",": the control plane returned an unexpected status.",[1479,1495,1496,1499],{},[31,1497,1498],{},"\"connection_failed\"",": the broker could not reach the control plane.",[1479,1501,1502,1505,1506,1508],{},[31,1503,1504],{},"\"token_expired\"",": a client token (JWT) whose ",[31,1507,1345],{}," has already passed.",[1479,1510,1511,1514],{},[31,1512,1513],{},"\"connection_limit_reached\"",": the organization's concurrent connection limit is full.",[1479,1516,1517,1520],{},[31,1518,1519],{},"\"broker_unavailable\"",": the broker's internal message bus is unreachable.",[23,1522,1524],{"id":1523},"re-authentication-errors","Re-authentication Errors",[14,1526,1527,1528,1530,1531,1534],{},"A ",[31,1529,1407],{}," frame (used to renew a client token on the live connection) is answered with ",[31,1532,1533],{},"{ \"type\": \"reauth\", \"success\": false, \"error\": ... }"," when it fails. The connection stays open under its current authentication until that expires.",[1476,1536,1537,1543,1548],{},[1479,1538,1539,1542],{},[31,1540,1541],{},"\"actor_mismatch\"",": the new token resolves to a different actor than the connection was opened with.",[1479,1544,1545,1547],{},[31,1546,1504],{},": the new token has already expired.",[1479,1549,1550],{},"Any of the authentication error strings above when the control plane rejects the token.",[18,1552,1554],{"id":1553},"next-steps","Next Steps",[1476,1556,1557,1563,1569],{},[1479,1558,1559],{},[1166,1560,1562],{"href":1561},"/docs/api-reference","REST API Reference",[1479,1564,1565],{},[1166,1566,1568],{"href":1567},"/docs/api-reference/websocket","WebSocket API Reference",[1479,1570,1571],{},[1166,1572,1574],{"href":1573},"/docs/protocol","Wire Protocol",[1576,1577,1578],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--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);}",{"title":56,"searchDepth":70,"depth":70,"links":1580},[1581,1586,1594],{"id":20,"depth":70,"text":21,"children":1582},[1583,1584,1585],{"id":25,"depth":87,"text":26},{"id":265,"depth":87,"text":266},{"id":356,"depth":87,"text":357},{"id":849,"depth":70,"text":850,"children":1587},[1588,1589,1590,1591,1592,1593],{"id":853,"depth":87,"text":26},{"id":1088,"depth":87,"text":1089},{"id":1260,"depth":87,"text":1261},{"id":1355,"depth":87,"text":1356},{"id":1415,"depth":87,"text":1416},{"id":1523,"depth":87,"text":1524},{"id":1553,"depth":70,"text":1554},"Complete reference for NoLag REST API and WebSocket errors, status codes, and error handling.","md",{},true,"/docs/api-reference/errors",{"title":5,"description":1595},"docs/api-reference/errors","GC7DIf_uiE0EpbERZ9Sn8uLdtWzwtB8w9V96tdfI3MY",1789869418690]