Skip to content
TriedDocs
Contacts

Save call to contact memory

Rewrite a contact's memory brief from one past call.

POSThttps://api.tried.com.au/contacts/{id}/memory/save-call

Needs keys Rewrites the contact's memory from one call's transcript and post-call analysis. This is the manual form of the automatic update agents run with contact_memory_config.enable_update.

OpenAI key

With an OpenAI key, gpt-5.6-terra rewrites the brief using the workspace memory prompt from Get contact memory settings. Without a key (mock mode), and if the model call fails, a dated line is appended instead: - YYYY-MM-DD: <call summary> (<extracted fields>), keeping the 12 newest lines.

Each call is saved and billed once, at $0.01. Saving the same call again returns the contact unchanged. The call can be any call in the workspace with a transcript.

Request#

Field Type Required Description
id string Yes Path parameter. The contact_id.

Body:

Field Type Required Description
call_id string Yes The call to save.

Example request#

curl -X POST https://api.tried.com.au/contacts/contact_4b8e2f1a9c3d5e7f6a0b2c4d/memory/save-call \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "call_id": "call_7c1d2e3f4a5b6c7d8e9f0a1b" }'
const id = "contact_4b8e2f1a9c3d5e7f6a0b2c4d";
const res = await fetch(`https://api.tried.com.au/contacts/${id}/memory/save-call`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ call_id: "call_7c1d2e3f4a5b6c7d8e9f0a1b" }),
});
const contact = await res.json();
import os, requests

contact_id = "contact_4b8e2f1a9c3d5e7f6a0b2c4d"
res = requests.post(
    f"https://api.tried.com.au/contacts/{contact_id}/memory/save-call",
    headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
    json={"call_id": "call_7c1d2e3f4a5b6c7d8e9f0a1b"},
)
contact = res.json()

Response#

200 OK

The contact with its memory fields. This example shows mock mode.

{
  "contact_id": "contact_4b8e2f1a9c3d5e7f6a0b2c4d",
  "phone_number": "+61412345678",
  "first_name": "Sam",
  "last_name": "Nguyen",
  "email": "sam@example.com",
  "custom_fields": { "plan": "Pro" },
  "do_not_call": false,
  "created_timestamp": 1760850000000,
  "last_modification_timestamp": 1760853700000,
  "memory": "- 2026-10-19: Sam asked to move the Tuesday 3pm appointment to Thursday. (new_time=Thursday 10am)",
  "memory_updated_timestamp": 1760853700000,
  "memory_conversation_count": 1
}

The memory fields are described in Get contact memory.

Errors#

Status When
400 call_id: Required, or The call has no transcript.
401 Missing or invalid API key.
403 The key's IP allowlist or scopes reject the request, or the caller has the read-only member role. This route needs the calls scope.
404 Contact <id> not found, or Call <call_id> not found.
429 Rate limit exceeded. See Rate limits.

See Errors for the body format.