PUT /v1/organizations/{orgId}/caddie-memory/{scope}/{key}
Edit the text of one memory Caddie holds about the calling user in this organization. Update-only — unknown keys return 404.

Path Parameters

orgId string required path
Organization ID
scope string required path
Memory scope (profile or notes)
key string required path
Memory key

Request Body required

New memory text

application/json
One of:
Option 1
Option 2
text string REQUIRED

Responses

200 OK
application/json
data object
hasMore boolean
items object[]
Array of:
archived boolean
category string
Deprecated: Use Tags instead
cooldownMs integer
createdAt string
createdBy string
definition object
Definition is the inline workflow graph to analyze. Same shape as a saved workflow's definition. Unlike the ephemeral-run endpoint there is no trigger restriction — analysis is read-only and method-agnostic.
blockExpansions object
Set on run snapshots only (not workflow DB)
inputSchema object[]
Array of:
description string
key string
required boolean
type string
"string", "number", "boolean", "object", "array"
nodes object REQUIRED
triggerNodeIds string[]
TriggerNodeIDs lists the node IDs that are trigger (root) nodes. Every workflow declares this — single-trigger workflows ship ["root"] (the legacy node id), multi-trigger workflows list every trigger node id. Treating single-trigger as a forest-of-1 removes the two-path branching throughout the BE + FE; older rows without the field are backfilled by migration 000282 and the field-missing path stays as a read-side safety net (see FindTriggerNodeIDs) but is no longer exercised by saves. "root" is also a runtime alias for "the trigger that fired this run" — {{root.X}} variable references resolve to the firing trigger regardless of which trigger fired. Don't repurpose the literal "root" as a trigger id on a multi-trigger workflow.
Array of:
variableDefs object[]
VariableDefs is a snapshot of the workflow's declared variables at run creation time. The canonical source lives on the workflows row (Workflow.VariableDefs column). Snapshotted into the run definition so the worker can resolve {{$vars.x}} lookups and route variable-action writes to the right scope without an extra DB round trip.
Array of:
default unknown
description string
lifetime string
Enum: persist, reset
name string
type string
Enum: number, text, boolean, list, object
description string
forkCount integer
generatedAppId string
Generated-app attachment (nil when the template ships no app). On adoption the referenced app is CLONED into the adopting org's new workflow. GeneratedAppVersionID optionally pins a specific version whose manifest is used as the clone source.
generatedAppVersionId string
id string
isPromoted boolean
maxRuns integer
moderationStatus string
Moderation fields (B3-4168). Only meaningful for public templates; org templates are always approved.
Enum: pending, approved, rejected
name string
organizationDescription string
organizationId string
Fields for user-generated templates (nil for built-in templates)
organizationName string
organizationPhoto string
promotedAt string
promotedBy string
promotedOrder integer
rejectionReason string
reviewedAt string
reviewedBy string
slug string
sourceWorkflowId string
Source workflow link (nil for built-in or legacy templates)
submittedAt string
tableSchemas object
tags object[]
Array of:
categories string[]
e.g., ["blockchain", "finance"]
Array of: ...
count integer
Scope-dependent: template, action, trigger, or connector count
createdAt string
description string
id string
imageUrl string
name string
promotedTemplateCount integer
publicTemplateCount integer
slug string
updatedAt string
weight integer
Higher weight = more prominent
templateProps object[]
Array of:
default unknown
description string
key string
name string
properties object
accountType string
AccountType filters the wallet picker by account type on inputType="walletConnector" fields (e.g. "polymarket_deposit_wallet").
allowWalletPicker boolean
allowedChannels string[]
...
autoFillFromWallet boolean
AutoFillFromWallet, when true, auto-fills this prop with the selected workflow wallet address and hides it from the form. Pointer so an explicit false survives the JSON round-trip (same rationale as AllowWalletPicker).
bindsConnectorNodes string[]
BindsConnectorNodes lists workflow node IDs whose wallet-type connector should be prefilled from this prop's picked wallet (inputType: "walletConnector"). The connector stays a plain, editable connector — this is a prefill, not a permanent bind.
...
chainId integer
For tokenAmount: hardcoded chain ID
chainPropKey string
For tokenSelector/tokenAmount: prop key providing chainId
columns object[]
Columns describes a csvTable prop (inputType: "csvTable"). The stored value is an object-of-columnar-arrays: {colKey: []value}. Payload templates reference each column via {{$props.<propKey>.<colKey>}}.
...
dex string
For hyperliquidAsset: hardcoded DEX name (fallback when no dexPropKey)
dexPropKey string
For hyperliquidAsset: prop key providing HIP-3 DEX name
enum unknown[]
...
enumLabels string[]
...
excludeNative boolean
For tokenSelector/multiTokenSelector: hide native tokens (field only accepts ERC-20 contract addresses)
groupKey string
Groups related props for unified UI rendering
inputType string
maxRows integer
csvTable: maximum allowed rows (0 = no cap)
maximum number
minRows integer
csvTable: minimum required rows (0 = default 1)
minimum number
pattern string
placeholder string
showWalletBalances boolean
For tokenSelector: show wallet balances (useful for "sell" tokens)
sources object[]
...
summary object
Summary drives the csvTable footer summary. Nil means no summary is rendered. See PropSchemaSummary for details.
...
tokenAddress string
For tokenAmount: hardcoded token address
tokenAddressPropKey string
For tokenAmount: prop key providing tokenAddress
visibleWhen object
VisibleWhen controls conditional visibility: show this prop only when the referenced prop has the specified value.
...
required boolean
sensitive boolean
type string
"string", "number", "integer", "boolean", "object" (for csvTable)
uiMetadata object
comments object[]
Array of:
createdAt string
createdBy object
...
id string
nodeId string
position object
...
replies object[]
...
resolved boolean
text string
updatedAt string
nodePositions object
stickyNotes object[]
Array of:
color string
createdAt string
createdBy object
...
id string
position object
...
size object
...
text string
updatedAt string
zIndex integer
updatedAt string
updatedBy string
version integer
visibility string
Enum: org, public, org, public
limit integer
offset integer
400 Bad Request
404 Not Found
503 Service Unavailable
curl -X PUT 'https://api.example.com/v1/organizations/string/caddie-memory/string/string' \  -H 'Authorization: Bearer YOUR_API_TOKEN' \  -H 'Content-Type: application/json' \  -d '{}'
const response = await fetch('https://api.example.com/v1/organizations/string/caddie-memory/string/string', {  method: 'PUT',  headers: {      "Authorization": "Bearer YOUR_API_TOKEN",      "Content-Type": "application/json"  },  body: JSON.stringify({})});const data = await response.json();console.log(data);
import requestsheaders = {    'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.put('https://api.example.com/v1/organizations/string/caddie-memory/string/string', headers=headers, json={})print(response.json())
package mainimport (	"fmt"	"io"	"net/http"	"strings")func main() {	body := strings.NewReader(`{}`)	req, _ := http.NewRequest("PUT", "https://api.example.com/v1/organizations/string/caddie-memory/string/string", body)	req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")	req.Header.Set("Content-Type", "application/json")	resp, _ := http.DefaultClient.Do(req)	defer resp.Body.Close()	result, _ := io.ReadAll(resp.Body)	fmt.Println(string(result))}
200 Response
{  "data": {    "hasMore": true,    "items": [      {        "archived": true,        "category": "<string>",        "cooldownMs": 123,        "createdAt": "<string>",        "createdBy": "<string>",        "definition": {          "blockExpansions": "<object>",          "inputSchema": [            {}          ],          "nodes": "<object>",          "triggerNodeIds": [            {}          ],          "variableDefs": [            {}          ]        },        "description": "<string>",        "forkCount": 123,        "generatedAppId": "<string>",        "generatedAppVersionId": "<string>",        "id": "<string>",        "isPromoted": true,        "maxRuns": 123,        "moderationStatus": "pending",        "name": "<string>",        "organizationDescription": "<string>",        "organizationId": "<string>",        "organizationName": "<string>",        "organizationPhoto": "<string>",        "promotedAt": "<string>",        "promotedBy": "<string>",        "promotedOrder": 123,        "rejectionReason": "<string>",        "reviewedAt": "<string>",        "reviewedBy": "<string>",        "slug": "<string>",        "sourceWorkflowId": "<string>",        "submittedAt": "<string>",        "tableSchemas": "<object>",        "tags": [          {            "categories": {},            "count": {},            "createdAt": {},            "description": {},            "id": {},            "imageUrl": {},            "name": {},            "promotedTemplateCount": {},            "publicTemplateCount": {},            "slug": {},            "updatedAt": {},            "weight": {}          }        ],        "templateProps": [          {            "default": {},            "description": {},            "key": {},            "name": {},            "properties": {},            "required": {},            "sensitive": {},            "type": {}          }        ],        "uiMetadata": {          "comments": [            {}          ],          "nodePositions": "<object>",          "stickyNotes": [            {}          ]        },        "updatedAt": "<string>",        "updatedBy": "<string>",        "version": 123,        "visibility": "org"      }    ],    "limit": 123,    "offset": 123  }}