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.
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.