[{"data":1,"prerenderedAt":1140},["ShallowReactive",2],{"docs:\u002Fdocs\u002Fapi\u002Fslabs":3,"docs:nav":1093},{"id":4,"title":5,"badge":6,"body":7,"description":1084,"extension":1085,"meta":1086,"navigation":1087,"order":87,"path":1088,"section":1089,"seo":1090,"stem":1091,"__hash__":1092},"docs\u002Fdocs\u002Fapi\u002Fslabs.md","Slabs",null,{"type":8,"value":9,"toc":1076},"minimark",[10,14,19,27,136,141,218,223,278,287,311,314,326,332,395,400,475,482,486,489,510,633,643,701,705,708,728,774,798,819,823,826,851,858,913,918,922,925,949,969,972,976,979,982,1069,1072],[11,12,13],"p",{},"A slab is one erasure-coded stripe. Registering it is how Tessera learns where your shards are, and\ntherefore how repair and retrieval become possible.",[15,16,18],"h2",{"id":17},"post-slabs","POST \u002Fslabs",[11,20,21,22,26],{},"Registers one or more slabs. The body is an ",[23,24,25],"strong",{},"array",", so a multi-slab object needs one call rather\nthan several.",[28,29,34],"pre",{"className":30,"code":31,"language":32,"meta":33,"style":33},"language-bash shiki shiki-themes github-dark-default github-dark-default","curl -X POST \"$TESSERA_API\u002Fslabs?$AUTH\" \\\n  -H 'content-type: application\u002Fjson' \\\n  -d '[{\n    \"version\": 1,\n    \"minShards\": 10,\n    \"encryptionKey\": \"MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=\",\n    \"sectors\": [\n      { \"host\": \"ed25519:9f3c…\", \"root\": \"22ab…\", \"contractID\": \"a1b2…\" }\n    ]\n  }]'\n","bash","",[35,36,37,74,85,94,100,106,112,118,124,130],"code",{"__ignoreMap":33},[38,39,42,46,50,54,57,61,64,67,70],"span",{"class":40,"line":41},"line",1,[38,43,45],{"class":44},"sAxfE","curl",[38,47,49],{"class":48},"sEQcL"," -X",[38,51,53],{"class":52},"skZ57"," POST",[38,55,56],{"class":52}," \"",[38,58,60],{"class":59},"sb7RM","$TESSERA_API",[38,62,63],{"class":52},"\u002Fslabs?",[38,65,66],{"class":59},"$AUTH",[38,68,69],{"class":52},"\"",[38,71,73],{"class":72},"srH4v"," \\\n",[38,75,77,80,83],{"class":40,"line":76},2,[38,78,79],{"class":48},"  -H",[38,81,82],{"class":52}," 'content-type: application\u002Fjson'",[38,84,73],{"class":72},[38,86,88,91],{"class":40,"line":87},3,[38,89,90],{"class":48},"  -d",[38,92,93],{"class":52}," '[{\n",[38,95,97],{"class":40,"line":96},4,[38,98,99],{"class":52},"    \"version\": 1,\n",[38,101,103],{"class":40,"line":102},5,[38,104,105],{"class":52},"    \"minShards\": 10,\n",[38,107,109],{"class":40,"line":108},6,[38,110,111],{"class":52},"    \"encryptionKey\": \"MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=\",\n",[38,113,115],{"class":40,"line":114},7,[38,116,117],{"class":52},"    \"sectors\": [\n",[38,119,121],{"class":40,"line":120},8,[38,122,123],{"class":52},"      { \"host\": \"ed25519:9f3c…\", \"root\": \"22ab…\", \"contractID\": \"a1b2…\" }\n",[38,125,127],{"class":40,"line":126},9,[38,128,129],{"class":52},"    ]\n",[38,131,133],{"class":40,"line":132},10,[38,134,135],{"class":52},"  }]'\n",[11,137,138],{},[23,139,140],{},"Slab object",[142,143,144,160],"table",{},[145,146,147],"thead",{},[148,149,150,154,157],"tr",{},[151,152,153],"th",{},"Field",[151,155,156],{},"Type",[151,158,159],{},"Description",[161,162,163,181,193,206],"tbody",{},[148,164,165,171,174],{},[166,167,168],"td",{},[35,169,170],{},"version",[166,172,173],{},"integer",[166,175,176,177,180],{},"Slab format version. Use ",[35,178,179],{},"1",".",[148,182,183,188,190],{},[166,184,185],{},[35,186,187],{},"minShards",[166,189,173],{},[166,191,192],{},"Shards required to reconstruct.",[148,194,195,200,203],{},[166,196,197],{},[35,198,199],{},"encryptionKey",[166,201,202],{},"base64",[166,204,205],{},"Exactly 32 bytes. Standard base64 with padding.",[148,207,208,213,215],{},[166,209,210],{},[35,211,212],{},"sectors",[166,214,25],{},[166,216,217],{},"One entry per shard, in shard order. Order is significant — it is the erasure-coding index.",[11,219,220],{},[23,221,222],{},"Sector object",[142,224,225,235],{},[145,226,227],{},[148,228,229,231,233],{},[151,230,153],{},[151,232,156],{},[151,234,159],{},[161,236,237,254,266],{},[148,238,239,244,247],{},[166,240,241],{},[35,242,243],{},"host",[166,245,246],{},"string",[166,248,249,250,253],{},"Provider public key, ",[35,251,252],{},"ed25519:"," + 64 hex characters.",[148,255,256,261,263],{},[166,257,258],{},[35,259,260],{},"root",[166,262,246],{},[166,264,265],{},"Merkle root of the sector, 64 hex characters.",[148,267,268,273,275],{},[166,269,270],{},[35,271,272],{},"contractID",[166,274,246],{},[166,276,277],{},"Contract the sector was written under.",[11,279,280,283,284],{},[23,281,282],{},"Response"," — ",[35,285,286],{},"200 OK",[28,288,292],{"className":289,"code":290,"language":291,"meta":33,"style":33},"language-json shiki shiki-themes github-dark-default github-dark-default","[\"4f2a1b8c9d3e...\", \"7b1c2d3e4f5a...\"]\n","json",[35,293,294],{"__ignoreMap":33},[38,295,296,299,302,305,308],{"class":40,"line":41},[38,297,298],{"class":59},"[",[38,300,301],{"class":52},"\"4f2a1b8c9d3e...\"",[38,303,304],{"class":59},", ",[38,306,307],{"class":52},"\"7b1c2d3e4f5a...\"",[38,309,310],{"class":59},"]\n",[11,312,313],{},"Hex slab IDs, in the same order as the request.",[315,316,319],"app-callout",{"title":317,"tone":318},"Slab IDs are content-addressed","note",[11,320,321,322,325],{},"The ID is a digest of the slab's parameters, so registering identical parameters twice returns the\nsame ID rather than creating a duplicate. Usefully, the digest does ",[23,323,324],{},"not"," include provider\nidentities — repair can relocate a shard without changing the ID, so objects referencing the slab\nnever need updating.",[11,327,328,331],{},[23,329,330],{},"Validation"," — all of these are rejected at registration:",[142,333,334,344],{},[145,335,336],{},[148,337,338,341],{},[151,339,340],{},"Rule",[151,342,343],{},"Error",[161,345,346,358,367,376,385],{},[148,347,348,353],{},[166,349,350,352],{},[35,351,199],{}," is not exactly 32 bytes",[166,354,355],{},[35,356,357],{},"manifest: invalid erasure coding params",[148,359,360,363],{},[166,361,362],{},"Redundancy below 1.5× or above 4.0×",[166,364,365],{},[35,366,357],{},[148,368,369,372],{},[166,370,371],{},"The same provider appears twice",[166,373,374],{},[35,375,357],{},[148,377,378,381],{},[166,379,380],{},"The same sector root appears twice",[166,382,383],{},[35,384,357],{},[148,386,387,390],{},[166,388,389],{},"No account on the request",[166,391,392],{},[35,393,394],{},"manifest: empty account",[11,396,397],{},[23,398,399],{},"Errors",[142,401,402,415],{},[145,403,404],{},[148,405,406,409,412],{},[151,407,408],{},"Status",[151,410,411],{},"Body",[151,413,414],{},"Cause",[161,416,417,432,445,460],{},[148,418,419,424,429],{},[166,420,421],{},[35,422,423],{},"400",[166,425,426],{},[35,427,428],{},"invalid request body: ...",[166,430,431],{},"Malformed JSON.",[148,433,434,438,442],{},[166,435,436],{},[35,437,423],{},[166,439,440],{},[35,441,357],{},[166,443,444],{},"See validation above.",[148,446,447,452,457],{},[166,448,449],{},[35,450,451],{},"402",[166,453,454],{},[35,455,456],{},"{\"error\": \"storage cap exceeded\", …}",[166,458,459],{},"Registration would exceed your storage cap.",[148,461,462,467,472],{},[166,463,464],{},[35,465,466],{},"405",[166,468,469],{},[35,470,471],{},"method not allowed",[166,473,474],{},"Wrong method.",[11,476,477,478,481],{},"Cap accounting charges ",[35,479,480],{},"4 MiB"," per sector at registration, which is the sector size regardless of how\nfull the sector is. Packing small objects into shared slabs is therefore materially cheaper than one\nslab per small object.",[15,483,485],{"id":484},"get-slabsid","GET \u002Fslabs\u002F{id}",[11,487,488],{},"Reads a slab: everything needed to retrieve and reconstruct it.",[28,490,492],{"className":30,"code":491,"language":32,"meta":33,"style":33},"curl \"$TESSERA_API\u002Fslabs\u002F4f2a1b8c9d3e...?$AUTH\"\n",[35,493,494],{"__ignoreMap":33},[38,495,496,498,500,502,505,507],{"class":40,"line":41},[38,497,45],{"class":44},[38,499,56],{"class":52},[38,501,60],{"class":59},[38,503,504],{"class":52},"\u002Fslabs\u002F4f2a1b8c9d3e...?",[38,506,66],{"class":59},[38,508,509],{"class":52},"\"\n",[28,511,513],{"className":289,"code":512,"language":291,"meta":33,"style":33},"{\n  \"id\": \"4f2a1b8c9d3e...\",\n  \"version\": 1,\n  \"minShards\": 10,\n  \"encryptionKey\": \"MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=\",\n  \"sectors\": [\n    { \"host\": \"ed25519:9f3c…\", \"root\": \"22ab…\", \"contractID\": \"a1b2…\" }\n  ],\n  \"createdAt\": \"2026-04-02T09:14:00Z\"\n}\n",[35,514,515,520,534,545,557,569,577,613,618,628],{"__ignoreMap":33},[38,516,517],{"class":40,"line":41},[38,518,519],{"class":59},"{\n",[38,521,522,526,529,531],{"class":40,"line":76},[38,523,525],{"class":524},"sV7Mv","  \"id\"",[38,527,528],{"class":59},": ",[38,530,301],{"class":52},[38,532,533],{"class":59},",\n",[38,535,536,539,541,543],{"class":40,"line":87},[38,537,538],{"class":524},"  \"version\"",[38,540,528],{"class":59},[38,542,179],{"class":48},[38,544,533],{"class":59},[38,546,547,550,552,555],{"class":40,"line":96},[38,548,549],{"class":524},"  \"minShards\"",[38,551,528],{"class":59},[38,553,554],{"class":48},"10",[38,556,533],{"class":59},[38,558,559,562,564,567],{"class":40,"line":102},[38,560,561],{"class":524},"  \"encryptionKey\"",[38,563,528],{"class":59},[38,565,566],{"class":52},"\"MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY=\"",[38,568,533],{"class":59},[38,570,571,574],{"class":40,"line":108},[38,572,573],{"class":524},"  \"sectors\"",[38,575,576],{"class":59},": [\n",[38,578,579,582,585,587,590,592,595,597,600,602,605,607,610],{"class":40,"line":114},[38,580,581],{"class":59},"    { ",[38,583,584],{"class":524},"\"host\"",[38,586,528],{"class":59},[38,588,589],{"class":52},"\"ed25519:9f3c…\"",[38,591,304],{"class":59},[38,593,594],{"class":524},"\"root\"",[38,596,528],{"class":59},[38,598,599],{"class":52},"\"22ab…\"",[38,601,304],{"class":59},[38,603,604],{"class":524},"\"contractID\"",[38,606,528],{"class":59},[38,608,609],{"class":52},"\"a1b2…\"",[38,611,612],{"class":59}," }\n",[38,614,615],{"class":40,"line":120},[38,616,617],{"class":59},"  ],\n",[38,619,620,623,625],{"class":40,"line":126},[38,621,622],{"class":524},"  \"createdAt\"",[38,624,528],{"class":59},[38,626,627],{"class":52},"\"2026-04-02T09:14:00Z\"\n",[38,629,630],{"class":40,"line":132},[38,631,632],{"class":59},"}\n",[11,634,635,636,638,639,642],{},"The ",[35,637,212],{}," array reflects ",[23,640,641],{},"current"," placement. If repair has moved a shard since you wrote it,\nyou will see the new provider here — which is the reason to re-read the slab rather than cache\nplacement indefinitely.",[142,644,645,655],{},[145,646,647],{},[148,648,649,651,653],{},[151,650,408],{},[151,652,411],{},[151,654,414],{},[161,656,657,671,686],{},[148,658,659,663,668],{},[166,660,661],{},[35,662,423],{},[166,664,665],{},[35,666,667],{},"invalid slab id: ...",[166,669,670],{},"Not 64 hex characters.",[148,672,673,678,683],{},[166,674,675],{},[35,676,677],{},"403",[166,679,680],{},[35,681,682],{},"manifest: forbidden for this account",[166,684,685],{},"The slab belongs to another account.",[148,687,688,693,698],{},[166,689,690],{},[35,691,692],{},"404",[166,694,695],{},[35,696,697],{},"manifest: not found",[166,699,700],{},"No such slab, for you.",[15,702,704],{"id":703},"get-slabs","GET \u002Fslabs",[11,706,707],{},"Lists your slab IDs.",[28,709,711],{"className":30,"code":710,"language":32,"meta":33,"style":33},"curl \"$TESSERA_API\u002Fslabs?limit=50&offset=0&$AUTH\"\n",[35,712,713],{"__ignoreMap":33},[38,714,715,717,719,721,724,726],{"class":40,"line":41},[38,716,45],{"class":44},[38,718,56],{"class":52},[38,720,60],{"class":59},[38,722,723],{"class":52},"\u002Fslabs?limit=50&offset=0&",[38,725,66],{"class":59},[38,727,509],{"class":52},[142,729,730,742],{},[145,731,732],{},[148,733,734,737,740],{},[151,735,736],{},"Parameter",[151,738,739],{},"Default",[151,741,159],{},[161,743,744,759],{},[148,745,746,751,756],{},[166,747,748],{},[35,749,750],{},"limit",[166,752,753],{},[35,754,755],{},"50",[166,757,758],{},"Maximum IDs returned.",[148,760,761,766,771],{},[166,762,763],{},[35,764,765],{},"offset",[166,767,768],{},[35,769,770],{},"0",[166,772,773],{},"Number to skip.",[28,775,777],{"className":289,"code":776,"language":291,"meta":33,"style":33},"[\"4f2a1b8c...\", \"7b1c2d3e...\", \"9e8d7c6b...\"]\n",[35,778,779],{"__ignoreMap":33},[38,780,781,783,786,788,791,793,796],{"class":40,"line":41},[38,782,298],{"class":59},[38,784,785],{"class":52},"\"4f2a1b8c...\"",[38,787,304],{"class":59},[38,789,790],{"class":52},"\"7b1c2d3e...\"",[38,792,304],{"class":59},[38,794,795],{"class":52},"\"9e8d7c6b...\"",[38,797,310],{"class":59},[315,799,802],{"title":800,"tone":801},"Offset pagination drifts","warn",[11,803,804,806,807,814,815,818],{},[35,805,765],{}," is not a stable cursor. If slabs are created or pruned between pages, entries can be missed\nor repeated. For a complete enumeration — an export, for instance — walk\n",[808,809,811],"a",{"href":810},"\u002Fdocs\u002Fapi\u002Fobjects",[35,812,813],{},"GET \u002Fobjects"," with its ",[35,816,817],{},"after"," cursor instead and collect slab IDs from the\nobject records.",[15,820,822],{"id":821},"delete-slabsid","DELETE \u002Fslabs\u002F{id}",[11,824,825],{},"Unpins a slab from your account.",[28,827,829],{"className":30,"code":828,"language":32,"meta":33,"style":33},"curl -X DELETE \"$TESSERA_API\u002Fslabs\u002F4f2a1b8c...?$AUTH\"\n",[35,830,831],{"__ignoreMap":33},[38,832,833,835,837,840,842,844,847,849],{"class":40,"line":41},[38,834,45],{"class":44},[38,836,49],{"class":48},[38,838,839],{"class":52}," DELETE",[38,841,56],{"class":52},[38,843,60],{"class":59},[38,845,846],{"class":52},"\u002Fslabs\u002F4f2a1b8c...?",[38,848,66],{"class":59},[38,850,509],{"class":52},[11,852,853,283,855,180],{},[23,854,282],{},[35,856,857],{},"204 No Content",[142,859,860,870],{},[145,861,862],{},[148,863,864,866,868],{},[151,865,408],{},[151,867,411],{},[151,869,414],{},[161,871,872,887,900],{},[148,873,874,879,884],{},[166,875,876],{},[35,877,878],{},"409",[166,880,881],{},[35,882,883],{},"manifest: slab still referenced by an object",[166,885,886],{},"Delete the referencing objects first.",[148,888,889,893,897],{},[166,890,891],{},[35,892,677],{},[166,894,895],{},[35,896,682],{},[166,898,899],{},"Not your slab.",[148,901,902,906,910],{},[166,903,904],{},[35,905,692],{},[166,907,908],{},[35,909,697],{},[166,911,912],{},"No such slab.",[11,914,635,915,917],{},[35,916,878],{}," is a guard rail, not an obstacle: it exists so that deleting a slab cannot silently corrupt\nan object that still points at it.",[15,919,921],{"id":920},"post-slabsprune","POST \u002Fslabs\u002Fprune",[11,923,924],{},"Reclaims slabs no object references. The normal way to clean up after deleting objects.",[28,926,928],{"className":30,"code":927,"language":32,"meta":33,"style":33},"curl -X POST \"$TESSERA_API\u002Fslabs\u002Fprune?$AUTH\"\n",[35,929,930],{"__ignoreMap":33},[38,931,932,934,936,938,940,942,945,947],{"class":40,"line":41},[38,933,45],{"class":44},[38,935,49],{"class":48},[38,937,53],{"class":52},[38,939,56],{"class":52},[38,941,60],{"class":59},[38,943,944],{"class":52},"\u002Fslabs\u002Fprune?",[38,946,66],{"class":59},[38,948,509],{"class":52},[28,950,952],{"className":289,"code":951,"language":291,"meta":33,"style":33},"{ \"pruned\": 3 }\n",[35,953,954],{"__ignoreMap":33},[38,955,956,959,962,964,967],{"class":40,"line":41},[38,957,958],{"class":59},"{ ",[38,960,961],{"class":524},"\"pruned\"",[38,963,528],{"class":59},[38,965,966],{"class":48},"3",[38,968,612],{"class":59},[11,970,971],{},"Scoped to your account, so it can never affect anyone else's data. Safe to run on a schedule.",[15,973,975],{"id":974},"packing-strategy","Packing strategy",[11,977,978],{},"A slab costs a 15-provider round trip to create and is accounted at 4 MiB per sector. That makes\none-slab-per-small-object expensive on both counts.",[11,980,981],{},"The model is built for packing. Buffer small writes, concatenate them, erasure-code the buffer once,\nand give each logical object a byte range in the resulting slab:",[28,983,987],{"className":984,"code":985,"language":986,"meta":33,"style":33},"language-ts shiki shiki-themes github-dark-default github-dark-default","\u002F\u002F Three objects sharing one slab\n{ id: objA, slabs: [{ id: slabID, offset: 0,       length: 1_048_576 }] }\n{ id: objB, slabs: [{ id: slabID, offset: 1_048_576, length: 2_097_152 }] }\n{ id: objC, slabs: [{ id: slabID, offset: 3_145_728, length:   524_288 }] }\n","ts",[35,988,989,995,1022,1045],{"__ignoreMap":33},[38,990,991],{"class":40,"line":41},[38,992,994],{"class":993},"sI3U9","\u002F\u002F Three objects sharing one slab\n",[38,996,997,999,1002,1005,1008,1011,1013,1016,1019],{"class":40,"line":76},[38,998,958],{"class":59},[38,1000,1001],{"class":44},"id",[38,1003,1004],{"class":59},": objA, ",[38,1006,1007],{"class":44},"slabs",[38,1009,1010],{"class":59},": [{ id: slabID, offset: ",[38,1012,770],{"class":48},[38,1014,1015],{"class":59},",       length: ",[38,1017,1018],{"class":48},"1_048_576",[38,1020,1021],{"class":59}," }] }\n",[38,1023,1024,1026,1028,1031,1033,1035,1037,1040,1043],{"class":40,"line":87},[38,1025,958],{"class":59},[38,1027,1001],{"class":44},[38,1029,1030],{"class":59},": objB, ",[38,1032,1007],{"class":44},[38,1034,1010],{"class":59},[38,1036,1018],{"class":48},[38,1038,1039],{"class":59},", length: ",[38,1041,1042],{"class":48},"2_097_152",[38,1044,1021],{"class":59},[38,1046,1047,1049,1051,1054,1056,1058,1061,1064,1067],{"class":40,"line":96},[38,1048,958],{"class":59},[38,1050,1001],{"class":44},[38,1052,1053],{"class":59},": objC, ",[38,1055,1007],{"class":44},[38,1057,1010],{"class":59},[38,1059,1060],{"class":48},"3_145_728",[38,1062,1063],{"class":59},", length:   ",[38,1065,1066],{"class":48},"524_288",[38,1068,1021],{"class":59},[11,1070,1071],{},"Each object is retrieved independently; they simply happen to share a stripe. The trade-off is that\nthe objects share a fate — the slab is a unit for repair and for deletion — so pack objects with\nsimilar lifetimes together.",[1073,1074,1075],"style",{},"html pre.shiki code .sAxfE, html code.shiki .sAxfE{--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .sEQcL, html code.shiki .sEQcL{--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .skZ57, html code.shiki .skZ57{--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sb7RM, html code.shiki .sb7RM{--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .srH4v, html code.shiki .srH4v{--shiki-default:#FF7B72;--shiki-dark:#FF7B72}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 .sV7Mv, html code.shiki .sV7Mv{--shiki-default:#7EE787;--shiki-dark:#7EE787}html pre.shiki code .sI3U9, html code.shiki .sI3U9{--shiki-default:#8B949E;--shiki-dark:#8B949E}",{"title":33,"searchDepth":87,"depth":87,"links":1077},[1078,1079,1080,1081,1082,1083],{"id":17,"depth":76,"text":18},{"id":484,"depth":76,"text":485},{"id":703,"depth":76,"text":704},{"id":821,"depth":76,"text":822},{"id":920,"depth":76,"text":921},{"id":974,"depth":76,"text":975},"Register, read, list, unpin, and prune erasure-coded slabs — the layer that records which provider holds which shard.","md",{},true,"\u002Fdocs\u002Fapi\u002Fslabs","API reference",{"title":5,"description":1084},"docs\u002Fapi\u002Fslabs","14ESiquNGTG0eeBt7iRo-EO09Xi976BMGNiW7ErQxG0",[1094,1098,1101,1105,1109,1110,1115,1120,1124,1128,1132,1136],{"path":1095,"title":1096,"description":1097,"section":1089,"order":102,"badge":6},"\u002Fdocs\u002Fapi\u002Faccount","Account","GET \u002Faccount — stored, read, and written byte counters for your credential.",{"path":810,"title":1099,"description":1100,"section":1089,"order":96,"badge":6},"Objects","Register, read, list, and delete objects — ordered lists of slab segments with encrypted keys and opaque metadata.",{"path":1102,"title":1103,"description":1104,"section":1089,"order":76,"badge":6},"\u002Fdocs\u002Fapi\u002Fplacement","Placement","POST \u002Fprepare-write — get the providers, contracts, and access tokens for writing a slab's shards.",{"path":1106,"title":1107,"description":1108,"section":1089,"order":41,"badge":6},"\u002Fdocs\u002Fapi\u002Fprovisioning","Credentials","Provision, verify, and revoke the ed25519 credential that is both your API identity and your account.",{"path":1088,"title":5,"description":1084,"section":1089,"order":87,"badge":6},{"path":1111,"title":1112,"description":1113,"section":1114,"order":76,"badge":6},"\u002Fdocs\u002Fauthentication","Authentication","Every request is signed with ed25519 over a blake2b hash of the method, host, path, expiry, and body. Here is the exact construction, with working code.","Guides",{"path":1116,"title":1117,"description":1118,"section":1119,"order":76,"badge":6},"\u002Fdocs\u002Fconcepts","Concepts & data model","Sectors, shards, slabs, objects, and accounts — what each one is, why the model has no filenames, and what that means for your integration.","Introduction",{"path":1121,"title":399,"description":1122,"section":1123,"order":41,"badge":6},"\u002Fdocs\u002Ferrors","Status codes, the two different error body formats, and the one case where a failure arrives with a 200.","Reference",{"path":1125,"title":1126,"description":1127,"section":1119,"order":41,"badge":6},"\u002Fdocs","Overview","Tessera is an HTTP API for storing encrypted, erasure-coded objects across independent storage providers. This is the reference for it.",{"path":1129,"title":1130,"description":1131,"section":1123,"order":76,"badge":6},"\u002Fdocs\u002Flimits","Limits & quotas","Rate limits, storage caps, geometry constraints, and the size and encoding limits that apply to every request.",{"path":1133,"title":1134,"description":1135,"section":1114,"order":41,"badge":6},"\u002Fdocs\u002Fquickstart","Quickstart","Provision a credential, upload an object across 15 providers, and read it back. Fifteen minutes, one file of code.",{"path":1137,"title":1138,"description":1139,"section":1114,"order":87,"badge":6},"\u002Fdocs\u002Frecovery","Recovery without Tessera","How to retrieve your data if Tessera is unavailable, unwilling, or permanently gone — and what you need to keep on hand for that to work.",1786190914482]