GoliathDevelopersGet an API key
Reference/Spacesgenerated from the gateway manifest

addMemoryNote

Memory: add a note to a shelf the key owner may open, as a person stated it, pinned.

POST/api/v1/callWRITEidempotent · 24 hruns as the key's owner
View as Markdown

Memory: add a note to a shelf the key owner may open, as a person stated it, pinned. PERSON with no subjectId is the owner's own, TEAM the organization's (its admins only), otherwise the EMPLOYEE or CONTACT id (listMemorySubjects). kind is RULE, PREFERENCE, DECISION, PROCEDURE, FACT or PROGRESS. The same words again return the existing note, re-pinned. In a chat, REMEMBER writes the person's own shelf, and TEAM for an org admin; this reaches the others.

curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "operationId": "addMemoryNote",
    "variables": {
      "shelf": "PERSON",
      "kind": "RULE",
      "text": "<String>"
    }
  }'
import { GoliathClient } from '@goliath-data/sdk'

const goliath = new GoliathClient({
  apiKey: process.env.GOLIATH_API_KEY!,
  baseUrl: 'https://server.goliathdata.com',
})

// Enum values as strings: the SDK's enum types aren't exported yet, so assert to the method's variables type.
const variables = {
  shelf: 'PERSON',
  kind: 'RULE',
  text: '<String>'
} as Parameters<typeof goliath.spaces.addMemoryNote>[0]

const result = await goliath.spaces.addMemoryNote(variables, { idempotencyKey: crypto.randomUUID() })
const res = await fetch('https://server.goliathdata.com/api/v1/call', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.GOLIATH_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({
    operationId: 'addMemoryNote',
    variables: {
      shelf: 'PERSON',
      kind: 'RULE',
      text: '<String>'
    }
  }),
})
const { data, errors } = await res.json()

Variables

The example sends only what the schema requires. Some operations also need one of several optional variables (one filter or another, say); the description above says which.

shelfSpacesMemoryShelf!required

A shelf of the Library's Memory page (Memory v2): where a note lives. PERSON is a person's own shelf ("You"); TEAM is the organization's. PROJECT is the dev fleet's, and opens only to Goliath admins. A teammate's PERSON shelf opens to everyone, written only by them and Goliath admins.

PERSONTEAMEMPLOYEECONTACTPROJECT
subjectIdID
kindSpacesMemoryNoteKind!required

What kind of thing a note is.

RULEPREFERENCEDECISIONPROCEDUREFACTENTITYPROGRESSTRUSTSUMMARYOBSERVATION
textString!required

Response

What comes back under data: a list shows as one entry, and a value as its type.

response shape
{
  "data": {
    "spacesMutation": {
      "memoryAddNote": {
        "id": "<ID>",
        "kind": "RULE",
        "text": "…",
        "origin": "STATED",
        "pinned": true
      }
    }
  }
}

Errors

Idempotency

Send an Idempotency-Key of 1 to 255 characters. A finished request retried with the same key replays its stored response, marked Idempotency-Replayed: true; one still in flight returns 409 idempotency_conflict. Keys expire after 24 hours. Write without fear →