[{"data":1,"prerenderedAt":951},["ShallowReactive",2],{"docs:\u002Fdocs\u002Fapi-quickstart":3,"docs:nav":908},{"id":4,"title":5,"badge":6,"body":7,"description":899,"extension":900,"meta":901,"navigation":902,"order":69,"path":903,"section":904,"seo":905,"stem":906,"__hash__":907},"docs\u002Fdocs\u002Fapi-quickstart.md","API quickstart",null,{"type":8,"value":9,"toc":895},"minimark",[10,20,25,56,279,315,321,325,369,379,399,836,839,866,891],[11,12,13,14,19],"p",{},"This is the HTTP API. For the supported CLI, use the ",[15,16,18],"a",{"href":17},"\u002Fdocs\u002Fquickstart","CLI quickstart",".",[21,22,24],"h2",{"id":23},"create-an-account","Create an account",[11,26,27,31,32,35,36,39,40,43,44,47,48,51,52,55],{},[28,29,30],"code",{},"POST \u002Fapi\u002Fv1\u002Fagents"," needs an ",[28,33,34],{},"X-Altcha"," solution. Fetch ",[28,37,38],{},"GET \u002Fapi\u002Fv1\u002Fauth\u002Faltcha-challenge",", find the decimal ",[28,41,42],{},"n"," from 0 through ",[28,45,46],{},"maxnumber"," where ",[28,49,50],{},"sha256(salt + n)"," equals ",[28,53,54],{},"challenge",", and send the base64 of that JSON. The CLI is not required.",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-bash shiki shiki-themes github-dark-default github-dark-default","ALTCHA=$(python3 - \u003C\u003C'PY'\nimport base64, hashlib, json, urllib.request\nwith urllib.request.urlopen(\"https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fauth\u002Faltcha-challenge\") as res:\n    challenge = json.load(res)\nnumber = None\nfor n in range(challenge[\"maxnumber\"] + 1):\n    digest = hashlib.sha256(f\"{challenge['salt']}{n}\".encode()).hexdigest()\n    if digest == challenge[\"challenge\"].lower():\n        number = n\n        break\nif number is None:\n    raise SystemExit(\"no solution\")\npayload = json.dumps({\n    \"algorithm\": challenge[\"algorithm\"],\n    \"challenge\": challenge[\"challenge\"],\n    \"number\": number,\n    \"salt\": challenge[\"salt\"],\n    \"signature\": challenge[\"signature\"],\n}, separators=(\",\", \":\")).encode()\nprint(base64.b64encode(payload).decode())\nPY\n)\ncurl -fsS -X POST https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fagents \\\n  -H 'content-type: application\u002Fjson' \\\n  -H \"X-Altcha: $ALTCHA\" \\\n  -d '{\"name\":\"build-box\"}'\n","bash","",[28,64,65,95,101,107,113,119,125,131,137,143,149,155,161,167,173,179,185,191,197,203,209,215,221,243,254,270],{"__ignoreMap":62},[66,67,70,74,78,81,85,89,92],"span",{"class":68,"line":69},"line",1,[66,71,73],{"class":72},"sb7RM","ALTCHA",[66,75,77],{"class":76},"srH4v","=",[66,79,80],{"class":72},"$(",[66,82,84],{"class":83},"sAxfE","python3",[66,86,88],{"class":87},"skZ57"," -",[66,90,91],{"class":76}," \u003C\u003C",[66,93,94],{"class":72},"'PY'\n",[66,96,98],{"class":68,"line":97},2,[66,99,100],{"class":87},"import base64, hashlib, json, urllib.request\n",[66,102,104],{"class":68,"line":103},3,[66,105,106],{"class":87},"with urllib.request.urlopen(\"https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fauth\u002Faltcha-challenge\") as res:\n",[66,108,110],{"class":68,"line":109},4,[66,111,112],{"class":87},"    challenge = json.load(res)\n",[66,114,116],{"class":68,"line":115},5,[66,117,118],{"class":87},"number = None\n",[66,120,122],{"class":68,"line":121},6,[66,123,124],{"class":87},"for n in range(challenge[\"maxnumber\"] + 1):\n",[66,126,128],{"class":68,"line":127},7,[66,129,130],{"class":87},"    digest = hashlib.sha256(f\"{challenge['salt']}{n}\".encode()).hexdigest()\n",[66,132,134],{"class":68,"line":133},8,[66,135,136],{"class":87},"    if digest == challenge[\"challenge\"].lower():\n",[66,138,140],{"class":68,"line":139},9,[66,141,142],{"class":87},"        number = n\n",[66,144,146],{"class":68,"line":145},10,[66,147,148],{"class":87},"        break\n",[66,150,152],{"class":68,"line":151},11,[66,153,154],{"class":87},"if number is None:\n",[66,156,158],{"class":68,"line":157},12,[66,159,160],{"class":87},"    raise SystemExit(\"no solution\")\n",[66,162,164],{"class":68,"line":163},13,[66,165,166],{"class":87},"payload = json.dumps({\n",[66,168,170],{"class":68,"line":169},14,[66,171,172],{"class":87},"    \"algorithm\": challenge[\"algorithm\"],\n",[66,174,176],{"class":68,"line":175},15,[66,177,178],{"class":87},"    \"challenge\": challenge[\"challenge\"],\n",[66,180,182],{"class":68,"line":181},16,[66,183,184],{"class":87},"    \"number\": number,\n",[66,186,188],{"class":68,"line":187},17,[66,189,190],{"class":87},"    \"salt\": challenge[\"salt\"],\n",[66,192,194],{"class":68,"line":193},18,[66,195,196],{"class":87},"    \"signature\": challenge[\"signature\"],\n",[66,198,200],{"class":68,"line":199},19,[66,201,202],{"class":87},"}, separators=(\",\", \":\")).encode()\n",[66,204,206],{"class":68,"line":205},20,[66,207,208],{"class":87},"print(base64.b64encode(payload).decode())\n",[66,210,212],{"class":68,"line":211},21,[66,213,214],{"class":72},"PY\n",[66,216,218],{"class":68,"line":217},22,[66,219,220],{"class":72},")\n",[66,222,224,227,231,234,237,240],{"class":68,"line":223},23,[66,225,226],{"class":83},"curl",[66,228,230],{"class":229},"sEQcL"," -fsS",[66,232,233],{"class":229}," -X",[66,235,236],{"class":87}," POST",[66,238,239],{"class":87}," https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fagents",[66,241,242],{"class":76}," \\\n",[66,244,246,249,252],{"class":68,"line":245},24,[66,247,248],{"class":229},"  -H",[66,250,251],{"class":87}," 'content-type: application\u002Fjson'",[66,253,242],{"class":76},[66,255,257,259,262,265,268],{"class":68,"line":256},25,[66,258,248],{"class":229},[66,260,261],{"class":87}," \"X-Altcha: ",[66,263,264],{"class":72},"$ALTCHA",[66,266,267],{"class":87},"\"",[66,269,242],{"class":76},[66,271,273,276],{"class":68,"line":272},26,[66,274,275],{"class":229},"  -d",[66,277,278],{"class":87}," '{\"name\":\"build-box\"}'\n",[57,280,284],{"className":281,"code":282,"language":283,"meta":62,"style":62},"language-json shiki shiki-themes github-dark-default github-dark-default","{ \"account_id\": \"…\", \"api_key\": \"tsk_…_…\" }\n","json",[28,285,286],{"__ignoreMap":62},[66,287,288,291,295,298,301,304,307,309,312],{"class":68,"line":69},[66,289,290],{"class":72},"{ ",[66,292,294],{"class":293},"sV7Mv","\"account_id\"",[66,296,297],{"class":72},": ",[66,299,300],{"class":87},"\"…\"",[66,302,303],{"class":72},", ",[66,305,306],{"class":293},"\"api_key\"",[66,308,297],{"class":72},[66,310,311],{"class":87},"\"tsk_…_…\"",[66,313,314],{"class":72}," }\n",[11,316,317,318,19],{},"That call creates the billing account. The API key is shown once. Send it as ",[28,319,320],{},"Authorization: Bearer",[21,322,324],{"id":323},"storage-credential","Storage credential",[57,326,328],{"className":59,"code":327,"language":61,"meta":62,"style":62},"curl -fsS -X POST https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fcredentials \\\n  -H 'authorization: Bearer tsk_…' \\\n  -H 'content-type: application\u002Fjson' \\\n  -d '{}'\n",[28,329,330,345,354,362],{"__ignoreMap":62},[66,331,332,334,336,338,340,343],{"class":68,"line":69},[66,333,226],{"class":83},[66,335,230],{"class":229},[66,337,233],{"class":229},[66,339,236],{"class":87},[66,341,342],{"class":87}," https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fcredentials",[66,344,242],{"class":76},[66,346,347,349,352],{"class":68,"line":97},[66,348,248],{"class":229},[66,350,351],{"class":87}," 'authorization: Bearer tsk_…'",[66,353,242],{"class":76},[66,355,356,358,360],{"class":68,"line":103},[66,357,248],{"class":229},[66,359,251],{"class":87},[66,361,242],{"class":76},[66,363,364,366],{"class":68,"line":109},[66,365,275],{"class":229},[66,367,368],{"class":87}," '{}'\n",[11,370,371,372,375,376,19],{},"The response includes a one-time ",[28,373,374],{},"connect_key",". A second identity returns ",[28,377,378],{},"409 identity_exists",[11,380,381,382,385,386,303,389,303,392,303,395,398],{},"Register that key with the indexer. This is ",[28,383,384],{},"go.sia.tech\u002Fsiastorage"," v0.2.1 (",[28,387,388],{},"context",[28,390,391],{},"fmt",[28,393,394],{},"net\u002Fhttp",[28,396,397],{},"strings","). The billing API does not return the storage private key.",[57,400,404],{"className":401,"code":402,"language":403,"meta":62,"style":62},"language-go shiki shiki-themes github-dark-default github-dark-default","appID := siastorage.GenerateAppID() \u002F\u002F keep it; it identifies this app\nbuilder := siastorage.NewBuilder(\"https:\u002F\u002Findex.tessera.storage\", siastorage.AppMetadata{\n    ID:   appID,\n    Name: \"build-box\",\n})\nresponseURL, err := builder.RequestConnection(ctx)\nif err != nil {\n    return err\n}\nreq, err := http.NewRequestWithContext(ctx, http.MethodPost, responseURL, strings.NewReader(`{\"approve\":true}`))\nif err != nil {\n    return err\n}\nreq.Header.Set(\"Content-Type\", \"application\u002Fjson\")\nreq.SetBasicAuth(\"\", connectKey) \u002F\u002F username empty, password is the connect key\nresp, err := http.DefaultClient.Do(req)\nif err != nil {\n    return err\n}\nresp.Body.Close()\nif resp.StatusCode \u003C 200 || resp.StatusCode >= 300 {\n    return fmt.Errorf(\"approve connection: HTTP %d\", resp.StatusCode)\n}\nif err := builder.WaitForApproval(ctx); err != nil {\n    return err\n}\nphrase := siastorage.NewSeedPhrase() \u002F\u002F save these 12 words\nsdk, err := builder.Register(ctx, phrase)\nif err != nil {\n    return err\n}\nappKey := sdk.AppKey() \u002F\u002F save it; Tessera does not\nsdk.Close()\n","go",[28,405,406,428,459,464,475,480,496,513,521,526,553,565,571,575,595,614,630,642,648,652,663,689,712,716,738,744,748,766,782,795,802,807,826],{"__ignoreMap":62},[66,407,408,411,414,417,421,424],{"class":68,"line":69},[66,409,410],{"class":72},"appID ",[66,412,413],{"class":76},":=",[66,415,416],{"class":72}," siastorage.",[66,418,420],{"class":419},"sYGIp","GenerateAppID",[66,422,423],{"class":72},"() ",[66,425,427],{"class":426},"sI3U9","\u002F\u002F keep it; it identifies this app\n",[66,429,430,433,435,437,440,443,446,448,451,453,456],{"class":68,"line":97},[66,431,432],{"class":72},"builder ",[66,434,413],{"class":76},[66,436,416],{"class":72},[66,438,439],{"class":419},"NewBuilder",[66,441,442],{"class":72},"(",[66,444,445],{"class":87},"\"https:\u002F\u002Findex.tessera.storage\"",[66,447,303],{"class":72},[66,449,450],{"class":83},"siastorage",[66,452,19],{"class":72},[66,454,455],{"class":83},"AppMetadata",[66,457,458],{"class":72},"{\n",[66,460,461],{"class":68,"line":103},[66,462,463],{"class":72},"    ID:   appID,\n",[66,465,466,469,472],{"class":68,"line":109},[66,467,468],{"class":72},"    Name: ",[66,470,471],{"class":87},"\"build-box\"",[66,473,474],{"class":72},",\n",[66,476,477],{"class":68,"line":115},[66,478,479],{"class":72},"})\n",[66,481,482,485,487,490,493],{"class":68,"line":121},[66,483,484],{"class":72},"responseURL, err ",[66,486,413],{"class":76},[66,488,489],{"class":72}," builder.",[66,491,492],{"class":419},"RequestConnection",[66,494,495],{"class":72},"(ctx)\n",[66,497,498,501,504,507,510],{"class":68,"line":127},[66,499,500],{"class":76},"if",[66,502,503],{"class":72}," err ",[66,505,506],{"class":76},"!=",[66,508,509],{"class":229}," nil",[66,511,512],{"class":72}," {\n",[66,514,515,518],{"class":68,"line":133},[66,516,517],{"class":76},"    return",[66,519,520],{"class":72}," err\n",[66,522,523],{"class":68,"line":139},[66,524,525],{"class":72},"}\n",[66,527,528,531,533,536,539,542,545,547,550],{"class":68,"line":145},[66,529,530],{"class":72},"req, err ",[66,532,413],{"class":76},[66,534,535],{"class":72}," http.",[66,537,538],{"class":419},"NewRequestWithContext",[66,540,541],{"class":72},"(ctx, http.MethodPost, responseURL, strings.",[66,543,544],{"class":419},"NewReader",[66,546,442],{"class":72},[66,548,549],{"class":87},"`{\"approve\":true}`",[66,551,552],{"class":72},"))\n",[66,554,555,557,559,561,563],{"class":68,"line":151},[66,556,500],{"class":76},[66,558,503],{"class":72},[66,560,506],{"class":76},[66,562,509],{"class":229},[66,564,512],{"class":72},[66,566,567,569],{"class":68,"line":157},[66,568,517],{"class":76},[66,570,520],{"class":72},[66,572,573],{"class":68,"line":163},[66,574,525],{"class":72},[66,576,577,580,583,585,588,590,593],{"class":68,"line":169},[66,578,579],{"class":72},"req.Header.",[66,581,582],{"class":419},"Set",[66,584,442],{"class":72},[66,586,587],{"class":87},"\"Content-Type\"",[66,589,303],{"class":72},[66,591,592],{"class":87},"\"application\u002Fjson\"",[66,594,220],{"class":72},[66,596,597,600,603,605,608,611],{"class":68,"line":175},[66,598,599],{"class":72},"req.",[66,601,602],{"class":419},"SetBasicAuth",[66,604,442],{"class":72},[66,606,607],{"class":87},"\"\"",[66,609,610],{"class":72},", connectKey) ",[66,612,613],{"class":426},"\u002F\u002F username empty, password is the connect key\n",[66,615,616,619,621,624,627],{"class":68,"line":181},[66,617,618],{"class":72},"resp, err ",[66,620,413],{"class":76},[66,622,623],{"class":72}," http.DefaultClient.",[66,625,626],{"class":419},"Do",[66,628,629],{"class":72},"(req)\n",[66,631,632,634,636,638,640],{"class":68,"line":187},[66,633,500],{"class":76},[66,635,503],{"class":72},[66,637,506],{"class":76},[66,639,509],{"class":229},[66,641,512],{"class":72},[66,643,644,646],{"class":68,"line":193},[66,645,517],{"class":76},[66,647,520],{"class":72},[66,649,650],{"class":68,"line":199},[66,651,525],{"class":72},[66,653,654,657,660],{"class":68,"line":205},[66,655,656],{"class":72},"resp.Body.",[66,658,659],{"class":419},"Close",[66,661,662],{"class":72},"()\n",[66,664,665,667,670,673,676,679,681,684,687],{"class":68,"line":211},[66,666,500],{"class":76},[66,668,669],{"class":72}," resp.StatusCode ",[66,671,672],{"class":76},"\u003C",[66,674,675],{"class":229}," 200",[66,677,678],{"class":76}," ||",[66,680,669],{"class":72},[66,682,683],{"class":76},">=",[66,685,686],{"class":229}," 300",[66,688,512],{"class":72},[66,690,691,693,696,699,701,704,707,709],{"class":68,"line":217},[66,692,517],{"class":76},[66,694,695],{"class":72}," fmt.",[66,697,698],{"class":419},"Errorf",[66,700,442],{"class":72},[66,702,703],{"class":87},"\"approve connection: HTTP ",[66,705,706],{"class":76},"%d",[66,708,267],{"class":87},[66,710,711],{"class":72},", resp.StatusCode)\n",[66,713,714],{"class":68,"line":223},[66,715,525],{"class":72},[66,717,718,720,722,724,726,729,732,734,736],{"class":68,"line":245},[66,719,500],{"class":76},[66,721,503],{"class":72},[66,723,413],{"class":76},[66,725,489],{"class":72},[66,727,728],{"class":419},"WaitForApproval",[66,730,731],{"class":72},"(ctx); err ",[66,733,506],{"class":76},[66,735,509],{"class":229},[66,737,512],{"class":72},[66,739,740,742],{"class":68,"line":256},[66,741,517],{"class":76},[66,743,520],{"class":72},[66,745,746],{"class":68,"line":272},[66,747,525],{"class":72},[66,749,751,754,756,758,761,763],{"class":68,"line":750},27,[66,752,753],{"class":72},"phrase ",[66,755,413],{"class":76},[66,757,416],{"class":72},[66,759,760],{"class":419},"NewSeedPhrase",[66,762,423],{"class":72},[66,764,765],{"class":426},"\u002F\u002F save these 12 words\n",[66,767,769,772,774,776,779],{"class":68,"line":768},28,[66,770,771],{"class":72},"sdk, err ",[66,773,413],{"class":76},[66,775,489],{"class":72},[66,777,778],{"class":419},"Register",[66,780,781],{"class":72},"(ctx, phrase)\n",[66,783,785,787,789,791,793],{"class":68,"line":784},29,[66,786,500],{"class":76},[66,788,503],{"class":72},[66,790,506],{"class":76},[66,792,509],{"class":229},[66,794,512],{"class":72},[66,796,798,800],{"class":68,"line":797},30,[66,799,517],{"class":76},[66,801,520],{"class":72},[66,803,805],{"class":68,"line":804},31,[66,806,525],{"class":72},[66,808,810,813,815,818,821,823],{"class":68,"line":809},32,[66,811,812],{"class":72},"appKey ",[66,814,413],{"class":76},[66,816,817],{"class":72}," sdk.",[66,819,820],{"class":419},"AppKey",[66,822,423],{"class":72},[66,824,825],{"class":426},"\u002F\u002F save it; Tessera does not\n",[66,827,829,832,834],{"class":68,"line":828},33,[66,830,831],{"class":72},"sdk.",[66,833,659],{"class":419},[66,835,662],{"class":72},[11,837,838],{},"Then link the identity:",[57,840,842],{"className":59,"code":841,"language":61,"meta":62,"style":62},"curl -fsS -X POST https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fcredentials\u002Factivate \\\n  -H 'authorization: Bearer tsk_…'\n",[28,843,844,859],{"__ignoreMap":62},[66,845,846,848,850,852,854,857],{"class":68,"line":69},[66,847,226],{"class":83},[66,849,230],{"class":229},[66,851,233],{"class":229},[66,853,236],{"class":87},[66,855,856],{"class":87}," https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1\u002Fcredentials\u002Factivate",[66,858,242],{"class":76},[66,860,861,863],{"class":68,"line":97},[66,862,248],{"class":229},[66,864,865],{"class":87}," 'authorization: Bearer tsk_…'\n",[11,867,868,869,872,873,877,878,881,882,886,887,19],{},"Storage requests are signed per call at ",[28,870,871],{},"https:\u002F\u002Findex.tessera.storage"," with that app key. See\n",[15,874,876],{"href":875},"\u002Fdocs\u002Fauthentication","Authentication",". Billing calls stay on ",[28,879,880],{},"https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1"," with\nthe bearer key. Prices are on ",[15,883,885],{"href":884},"\u002Fpricing","Pricing",". Adding funds from the CLI is\n",[15,888,890],{"href":889},"\u002Fwallet","Wallet and top-ups",[892,893,894],"style",{},"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 pre.shiki code .sAxfE, html code.shiki .sAxfE{--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .skZ57, html code.shiki .skZ57{--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sEQcL, html code.shiki .sEQcL{--shiki-default:#79C0FF;--shiki-dark:#79C0FF}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 .sYGIp, html code.shiki .sYGIp{--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .sI3U9, html code.shiki .sI3U9{--shiki-default:#8B949E;--shiki-dark:#8B949E}",{"title":62,"searchDepth":103,"depth":103,"links":896},[897,898],{"id":23,"depth":97,"text":24},{"id":323,"depth":97,"text":324},"Create a billing account over HTTP, then register a storage key with the SDK.","md",{},true,"\u002Fdocs\u002Fapi-quickstart","API",{"title":5,"description":899},"docs\u002Fapi-quickstart","D4SO2h5BrbIMZBh-35-ExhpZNjW46yCsmyceEx57xvQ",[909,913,914,918,921,924,927,930,931,935,939,942,945,948],{"path":910,"title":911,"description":62,"section":912,"order":97,"badge":6},"\u002Fdocs\u002Faccounts","Accounts & billing","Guides",{"path":903,"title":5,"description":899,"section":904,"order":69,"badge":6},{"path":915,"title":916,"description":62,"section":917,"order":115,"badge":6},"\u002Fdocs\u002Fapi\u002Faccount","Account","API reference",{"path":919,"title":920,"description":62,"section":917,"order":109,"badge":6},"\u002Fdocs\u002Fapi\u002Fobjects","Objects",{"path":922,"title":923,"description":62,"section":917,"order":97,"badge":6},"\u002Fdocs\u002Fapi\u002Fplacement","Placement",{"path":925,"title":926,"description":62,"section":917,"order":69,"badge":6},"\u002Fdocs\u002Fapi\u002Fprovisioning","Credentials",{"path":928,"title":929,"description":62,"section":917,"order":103,"badge":6},"\u002Fdocs\u002Fapi\u002Fslabs","Slabs",{"path":875,"title":876,"description":62,"section":912,"order":103,"badge":6},{"path":932,"title":933,"description":62,"section":934,"order":97,"badge":6},"\u002Fdocs\u002Fconcepts","Concepts & data model","Introduction",{"path":936,"title":937,"description":62,"section":938,"order":69,"badge":6},"\u002Fdocs\u002Ferrors","Errors","Reference",{"path":940,"title":941,"description":62,"section":904,"order":69,"badge":6},"\u002Fdocs","Overview",{"path":943,"title":944,"description":62,"section":938,"order":97,"badge":6},"\u002Fdocs\u002Flimits","Limits & quotas",{"path":17,"title":18,"description":946,"section":947,"order":69,"badge":6},"Install the CLI, create an account, store one file, and read it back.","CLI",{"path":949,"title":950,"description":62,"section":912,"order":109,"badge":6},"\u002Fdocs\u002Frecovery","Recovery without Tessera",1794225018381]