diff --git a/docs/storage-apis.md b/docs/storage-apis.md
index d2e6872..c570d9e 100644
--- a/docs/storage-apis.md
+++ b/docs/storage-apis.md
@@ -352,18 +352,203 @@ print('Second secret retrieved:', secret2)
+### 6. Update Secret
+
+Update an existing secret's value using PUT `/api/apps/{app_id}/secrets/{store_id}` with the secret's store ID and updated value.
+
+**Make sure to update the `APP_ID` and `STORE_ID` below with your values before running the code:**
+
+
+
+
+```javascript
+const APP_ID = 'INSERT_YOUR_APP_ID_HERE';
+const STORE_ID = 'INSERT_YOUR_STORE_ID_HERE'; // use the store_id of the secret you want to update
+const USER_SEED = 'user_123'; // generates a deterministic nillion user id; use any string
+const API_BASE = 'https://nillion-storage-apis-v0.onrender.com';
+
+// Update the secret with a new value
+console.log('\nUpdating secret...');
+const updateResponse = await fetch(
+ `${API_BASE}/api/apps/${APP_ID}/secrets/${STORE_ID}`,
+ {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ nillion_seed: USER_SEED,
+ secret_value: "gm gm gm gm!",
+ secret_name: "my_secret" // use the original secret name
+ }),
+ }
+).then((res) => res.json());
+console.log('Secret updated:', updateResponse);
+
+// Verify the updated secret
+const verifyResponse = await fetch(
+ `${API_BASE}/api/secret/retrieve/${STORE_ID}?retrieve_as_nillion_user_seed=${USER_SEED}&secret_name=my_secret`
+).then((res) => res.json());
+console.log('Updated secret retrieved:', verifyResponse);
+```
+
+
+
+
+```python
+import requests
+
+APP_ID = 'INSERT_YOUR_APP_ID_HERE'
+STORE_ID = 'INSERT_YOUR_STORE_ID_HERE' # use the store_id of the secret you want to update
+USER_SEED = 'user_123' # generates a deterministic nillion user id; use any string
+API_BASE = 'https://nillion-storage-apis-v0.onrender.com'
+
+print('\nUpdating secret...')
+updateResponse = requests.put(
+ f'{API_BASE}/api/apps/{APP_ID}/secrets/{STORE_ID}',
+ headers={'Content-Type': 'application/json'},
+ json={
+ 'nillion_seed': USER_SEED,
+ 'secret_value': "gm gm gm gm!",
+ 'secret_name': "my_secret" # use the original secret name
+ }
+).json()
+print('Secret updated:', updateResponse)
+
+# Verify the updated secret
+verifyResponse = requests.get(
+ f'{API_BASE}/api/secret/retrieve/{STORE_ID}',
+ params={
+ 'retrieve_as_nillion_user_seed': USER_SEED,
+ 'secret_name': 'my_secret'
+ }
+).json()
+print('Updated secret retrieved:', verifyResponse)
+```
+
+
+
+
## Quickstart Complete Code
**Make sure to update the `APP_ID` below with your app_id from step 0 before running the code:**
-```javascript reference showGithubLink
-https://github.com/oceans404/nillion-storage-apis-v0/blob/main/Quickstart.md?plain=1#L48-L131
+```javascript
+const APP_ID = 'INSERT_YOUR_APP_ID_HERE';
+const USER_SEED = 'user_123'; // your seed generates a deterministic nillion user id - check it in step 1
+const API_BASE = 'https://nillion-storage-apis-v0.onrender.com';
+
+async function runQuickstart() {
+ try {
+ // 1. Check your deterministic user ID
+ console.log('Checking user ID generated by your seed...');
+ const user = await fetch(`${API_BASE}/api/user`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ nillion_seed: USER_SEED,
+ }),
+ }).then((res) => res.json());
+ console.log('Your User ID:', user.nillion_user_id);
+
+ // 2. Store first secret (number)
+ console.log('\nStoring first secret...');
+ const storeResult1 = await fetch(`${API_BASE}/api/apps/${APP_ID}/secrets`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ secret: {
+ nillion_seed: USER_SEED,
+ secret_value: 16,
+ secret_name: 'my_secret_number',
+ },
+ permissions: {
+ retrieve: [],
+ update: [],
+ delete: [],
+ compute: {},
+ },
+ }),
+ }).then((res) => res.json());
+ console.log('First secret stored at:', storeResult1);
+
+ // 3. Store second secret (string/blob)
+ console.log('\nStoring second secret...');
+ const storeResult2 = await fetch(`${API_BASE}/api/apps/${APP_ID}/secrets`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ secret: {
+ nillion_seed: USER_SEED,
+ secret_value: 'gm!',
+ secret_name: 'my_secret_blob',
+ },
+ permissions: {
+ retrieve: [],
+ update: [],
+ delete: [],
+ compute: {},
+ },
+ }),
+ }).then((res) => res.json());
+ console.log('Second secret stored at:', storeResult2);
+
+ // 4. List store IDs
+ console.log('\nListing store IDs...');
+ const storeIds = await fetch(`${API_BASE}/api/apps/${APP_ID}/store_ids`)
+ .then((res) => res.json())
+ .then((data) => data.store_ids);
+ console.log('Store IDs:', storeIds);
+
+ // 5. Retrieve both secrets using the store IDs we just created
+ console.log('\nRetrieving secrets...');
+ const secret1 = await fetch(
+ `${API_BASE}/api/secret/retrieve/${storeIds[0].store_id}?retrieve_as_nillion_user_seed=${USER_SEED}&secret_name=${storeIds[0].secret_name}`
+ ).then((res) => res.json());
+ console.log('First secret retrieved:', secret1);
+
+ const secret2 = await fetch(
+ `${API_BASE}/api/secret/retrieve/${storeIds[1].store_id}?retrieve_as_nillion_user_seed=${USER_SEED}&secret_name=${storeIds[1].secret_name}`
+ ).then((res) => res.json());
+ console.log('Second secret retrieved:', secret2);
+
+ // 6. Update first secret
+ console.log('\nUpdating first secret...');
+ const updateResponse = await fetch(
+ `${API_BASE}/api/apps/${APP_ID}/secrets/${storeIds[0].store_id}`,
+ {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ nillion_seed: USER_SEED,
+ secret_value: "gm gm gm gm!",
+ secret_name: storeIds[0].secret_name
+ }),
+ }
+ ).then((res) => res.json());
+ console.log('Secret updated:', updateResponse);
+
+ // Verify the update
+ const verifyUpdate = await fetch(
+ `${API_BASE}/api/secret/retrieve/${storeIds[0].store_id}?retrieve_as_nillion_user_seed=${USER_SEED}&secret_name=${storeIds[0].secret_name}`
+ ).then((res) => res.json());
+ console.log('Updated secret retrieved:', verifyUpdate);
+
+ } catch (error) {
+ console.error('Error in flow:', error);
+ }
+}
+
+// Run the quickstart
+runQuickstart();
```
-```
+```python
import requests
APP_ID = 'INSERT_YOUR_APP_ID_HERE'
@@ -443,6 +628,29 @@ def run_quickstart():
).json()
print('Second secret retrieved:', secret2)
+ # 6. Update first secret
+ print('\nUpdating first secret...')
+ updateResponse = requests.put(
+ f'{API_BASE}/api/apps/{APP_ID}/secrets/{storeIds[0]["store_id"]}',
+ headers={'Content-Type': 'application/json'},
+ json={
+ 'nillion_seed': USER_SEED,
+ 'secret_value': "gm gm gm gm!",
+ 'secret_name': storeIds[0]['secret_name']
+ }
+ ).json()
+ print('Secret updated:', updateResponse)
+
+ # Verify the update
+ verifyUpdate = requests.get(
+ f'{API_BASE}/api/secret/retrieve/{storeIds[0]["store_id"]}',
+ params={
+ 'retrieve_as_nillion_user_seed': USER_SEED,
+ 'secret_name': storeIds[0]['secret_name']
+ }
+ ).json()
+ print('Updated secret retrieved:', verifyUpdate)
+
except Exception as error:
print('Error in flow:', error)