[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"docs:\u002Fdocs":3,"docs:nav":146},{"id":4,"title":5,"badge":6,"body":7,"description":48,"extension":137,"meta":138,"navigation":139,"order":140,"path":141,"section":142,"seo":143,"stem":144,"__hash__":145},"docs\u002Fdocs\u002Findex.md","Overview",null,{"type":8,"value":9,"toc":129},"minimark",[10,14,17,25,34,39,49,52,56,62,73,76,80,86,90],[11,12,13],"p",{},"Tessera is never in the data path. What Tessera actually does: aggressive host screening,\ngeo-aware host selection (per client), and pre-payment of hosts (also per client) so you can\nwrite and read data anytime, on demand. Tessera never sees or even handles the (encrypted) bytes.\nThat's the whole point of decentralized storage. We don't get between you and your data.",[11,15,16],{},"You or your agent call the Tessera API to find out where to write, then you write directly to\nhosts we have prepaid for you. Then you tell us what you did so we can store that metadata in\nTessera's manifest, allowing you to reconstruct your file, on demand, slab by slab, from the field\nof hosts you're employing.",[11,18,19,20,24],{},"There is no ",[21,22,23],"code",{},"PUT \u002Fobjects"," that accepts a body. If you want one, you can build it from the\nprimitives below.",[11,26,27,28,33],{},"If you are going to use an agent at all, spend 10 minutes getting him fluent in Tessera. You will\nlearn the system in the process. ",[29,30,32],"a",{"href":31},"\u002Fcoaching-your-agent","Coaching your agent",".",[35,36,38],"h2",{"id":37},"the-shape-of-an-upload","The shape of an upload",[40,41,46],"pre",{"className":42,"code":44,"language":45},[43],"language-text","1. POST \u002Fprepare-write   → 30 providers, with an access token and contract for each\n2. (your client)           encrypt → Reed–Solomon split into 30 shards\n3. (your client)           write each shard directly to its provider\n4. POST \u002Fslabs           → register the shards as a slab, get a slab ID back\n5. POST \u002Fobjects         → register the object as an ordered list of slabs\n","text",[21,47,44],{"__ignoreMap":48},"",[11,50,51],{},"A download is the same in reverse: read the object, read its slabs, fetch any 10 shards per slab\nfrom providers, reconstruct, decrypt. Any 10 of the 30 rebuild the file.",[35,53,55],{"id":54},"base-url","Base URL",[11,57,58,59],{},"Storage API: ",[21,60,61],{},"https:\u002F\u002Findex.tessera.storage",[11,63,64,65,68,69,33],{},"Account and billing: ",[21,66,67],{},"https:\u002F\u002Ftessera.storage\u002Fapi\u002Fv1"," — see ",[29,70,72],{"href":71},"\u002Fdocs\u002Faccounts","Accounts",[11,74,75],{},"Endpoints are unversioned. Breaking changes will be new paths, not silent changes to existing ones.",[35,77,79],{"id":78},"authentication","Authentication",[11,81,82,83,33],{},"Storage requests are signed. No sessions, no cookies. See ",[29,84,79],{"href":85},"\u002Fdocs\u002Fauthentication",[35,87,89],{"id":88},"what-is-not-here","What is not here",[91,92,93,101,111,117,123],"ul",{},[94,95,96,100],"li",{},[97,98,99],"strong",{},"No S3 compatibility."," No buckets, no presigned URLs, no multipart upload protocol.",[94,102,103,106,107,33],{},[97,104,105],{},"No filenames or directories."," Names live in an encrypted metadata blob only your keys can\nread. See ",[29,108,110],{"href":109},"\u002Fdocs\u002Fconcepts","Concepts",[94,112,113,116],{},[97,114,115],{},"No server-side encryption."," Encryption is in your client, by design.",[94,118,119,122],{},[97,120,121],{},"No resumable upload protocol."," A failed shard write is retried against another provider; that\nis your client's job.",[94,124,125,128],{},[97,126,127],{},"No browser-only integration."," The API sets no CORS headers. Call it from a server, a native\nclient, or your own backend.",{"title":48,"searchDepth":130,"depth":130,"links":131},3,[132,134,135,136],{"id":37,"depth":133,"text":38},2,{"id":54,"depth":133,"text":55},{"id":78,"depth":133,"text":79},{"id":88,"depth":133,"text":89},"md",{},true,1,"\u002Fdocs","Introduction",{"title":5,"description":48},"docs\u002Findex","Pe-t1DFgCQuZa8uZdGCuekXMKPn5H6rHEVEr4PYsHnM",[147,150,155,159,162,165,168,169,171,175,178,179,182,185],{"path":71,"title":148,"description":48,"section":149,"order":133,"badge":6},"Accounts & billing","Guides",{"path":151,"title":152,"description":48,"section":153,"order":154,"badge":6},"\u002Fdocs\u002Fapi\u002Faccount","Account","API reference",5,{"path":156,"title":157,"description":48,"section":153,"order":158,"badge":6},"\u002Fdocs\u002Fapi\u002Fobjects","Objects",4,{"path":160,"title":161,"description":48,"section":153,"order":133,"badge":6},"\u002Fdocs\u002Fapi\u002Fplacement","Placement",{"path":163,"title":164,"description":48,"section":153,"order":140,"badge":6},"\u002Fdocs\u002Fapi\u002Fprovisioning","Credentials",{"path":166,"title":167,"description":48,"section":153,"order":130,"badge":6},"\u002Fdocs\u002Fapi\u002Fslabs","Slabs",{"path":85,"title":79,"description":48,"section":149,"order":130,"badge":6},{"path":109,"title":170,"description":48,"section":142,"order":133,"badge":6},"Concepts & data model",{"path":172,"title":173,"description":48,"section":174,"order":140,"badge":6},"\u002Fdocs\u002Ferrors","Errors","Reference",{"path":176,"title":177,"description":48,"section":149,"order":130,"badge":6},"\u002Fdocs\u002Fhow-storage-is-measured","How storage is measured",{"path":141,"title":5,"description":48,"section":142,"order":140,"badge":6},{"path":180,"title":181,"description":48,"section":174,"order":133,"badge":6},"\u002Fdocs\u002Flimits","Limits & quotas",{"path":183,"title":184,"description":48,"section":149,"order":140,"badge":6},"\u002Fdocs\u002Fquickstart","Quickstart",{"path":186,"title":187,"description":48,"section":149,"order":158,"badge":6},"\u002Fdocs\u002Frecovery","Recovery without Tessera",1794220764089]