Contacts
Create contact activity
Log a manual note or activity event against a contact record
POST
/
api
/
v1
/
contacts
/
{contact_id}
/
activities
curl -X POST "https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline.",
"payload": {
"channel": "phone",
"call_duration_mins": 15
}
}'
import requests
url = "https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities"
payload = {
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline.",
"payload": {
"channel": "phone",
"call_duration_mins": 15
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
type: "note_added",
note: "Spoke on phone regarding enterprise migration timeline.",
payload: {
channel: "phone",
call_duration_mins: 15
}
})
});
const data = await response.json();
console.log(data);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String jsonPayload = """
{
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline."
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{
"id": "d9818e6b-67e3-4632-9cb4-221272718e88",
"organization_id": "00000000-0000-0000-0000-000000000001",
"contact_id": "7b8f9e2a-4c1d-48ef-9123-bcde456789ab",
"type": "note_added",
"actor_type": "user",
"actor_id": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"payload": {
"note": "Spoke on phone regarding enterprise migration timeline.",
"channel": "phone",
"call_duration_mins": 15
},
"created_at": "2026-10-07T16:15:00Z"
}
{
"detail": "Contact not found"
}
{
"detail": "Unauthorized"
}
Log an internal note, manual action, or custom activity event against a contact. Adding a
note_added activity automatically synchronizes with the contact’s CRM interaction history and updates the contact’s last_activity_at timestamp.
Authentication
This endpoint requires Bearer token authentication.Authorization: Bearer <token>
| Header | Type | Required | Description | Format |
|---|---|---|---|---|
Authorization | string | Yes | Scoped organization API key or Bearer JWT token | Bearer <token> |
Input parameters
string
required
Unique UUID identifier of the contact. Example:
7b8f9e2a-4c1d-48ef-9123-bcde456789ab.string
required
Bearer token for authentication. Format:
Bearer <token>.string
default:"note_added"
Activity type identifier matching standard events (e.g.
note_added, meeting_scheduled, call_logged).string
Direct textual note content (e.g.
"Customer requested custom SLA terms.").object
Optional JSON dictionary containing additional event metadata and attributes.
Response Fields
string
Generated UUID identifier of the activity.
string
Organization UUID.
string
Associated contact UUID.
string
Activity type event recorded.
string
Actor attribution type (typically
user).string
UUID of the authenticated user who created the note/activity.
object
Stored event metadata dictionary.
string
ISO 8601 creation timestamp.
curl -X POST "https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline.",
"payload": {
"channel": "phone",
"call_duration_mins": 15
}
}'
import requests
url = "https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities"
payload = {
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline.",
"payload": {
"channel": "phone",
"call_duration_mins": 15
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
type: "note_added",
note: "Spoke on phone regarding enterprise migration timeline.",
payload: {
channel: "phone",
call_duration_mins: 15
}
})
});
const data = await response.json();
console.log(data);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String jsonPayload = """
{
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline."
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{
"id": "d9818e6b-67e3-4632-9cb4-221272718e88",
"organization_id": "00000000-0000-0000-0000-000000000001",
"contact_id": "7b8f9e2a-4c1d-48ef-9123-bcde456789ab",
"type": "note_added",
"actor_type": "user",
"actor_id": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"payload": {
"note": "Spoke on phone regarding enterprise migration timeline.",
"channel": "phone",
"call_duration_mins": 15
},
"created_at": "2026-10-07T16:15:00Z"
}
{
"detail": "Contact not found"
}
{
"detail": "Unauthorized"
}
‹ PreviousNext ›
Delete contact
DELETE /api/v1/contacts/{contact_id}
Was this page helpful?
⌘I
curl -X POST "https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline.",
"payload": {
"channel": "phone",
"call_duration_mins": 15
}
}'
import requests
url = "https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities"
payload = {
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline.",
"payload": {
"channel": "phone",
"call_duration_mins": 15
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities", {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
type: "note_added",
note: "Spoke on phone regarding enterprise migration timeline.",
payload: {
channel: "phone",
call_duration_mins: 15
}
})
});
const data = await response.json();
console.log(data);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String jsonPayload = """
{
"type": "note_added",
"note": "Spoke on phone regarding enterprise migration timeline."
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sayvy.ai/api/v1/contacts/7b8f9e2a-4c1d-48ef-9123-bcde456789ab/activities"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{
"id": "d9818e6b-67e3-4632-9cb4-221272718e88",
"organization_id": "00000000-0000-0000-0000-000000000001",
"contact_id": "7b8f9e2a-4c1d-48ef-9123-bcde456789ab",
"type": "note_added",
"actor_type": "user",
"actor_id": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"payload": {
"note": "Spoke on phone regarding enterprise migration timeline.",
"channel": "phone",
"call_duration_mins": 15
},
"created_at": "2026-10-07T16:15:00Z"
}
{
"detail": "Contact not found"
}
{
"detail": "Unauthorized"
}