GoliathDevelopersGet an API key
Reference/Contactsgenerated from the gateway manifest

addContactNote

Add a text note to a contact, synchronously (getContact returns it at once).

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

Add a text note to a contact, synchronously (getContact returns it at once). The response is the OWNING CONTACT, not the note (id and name are the contact's), so report the name it gives back, never the name you searched for. They differ more often than they look: contactId usually comes from a findContacts search, which ranks and can return a near match for a name with no exact one. A run that wrote to the top row and told the user the note landed on the searched name has reported a record it did not touch, which nothing downstream catches. If the echoed name is not the contact the user named, say so and offer to move the note. Returns no noteId: re-read getContact notes[] for one (see editContactNote).

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": "addContactNote",
    "variables": {
      "contactId": "<contactId>",
      "body": "<String>"
    }
  }'
import { GoliathClient } from '@goliath-data/sdk'

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

const result = await goliath.contacts.addContactNote(
  {
    contactId: '<contactId>',
    body: '<String>'
  },
  { 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: 'addContactNote',
    variables: {
      contactId: '<contactId>',
      body: '<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.

contactIdID!required
bodyString!required

Response

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

response shape
{
  "data": {
    "noteMutation": {
      "createNote": {
        "id": "<ID>",
        "name": "…"
      }
    }
  }
}

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 →