List Contact Activities
curl --request GET \
--url https://api.example.com/v1/contacts/{id}/activitiesimport requests
url = "https://api.example.com/v1/contacts/{id}/activities"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/contacts/{id}/activities', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/contacts/{id}/activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/contacts/{id}/activities"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/contacts/{id}/activities")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/contacts/{id}/activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"activities": [
{
"id": "<string>",
"type": "<string>",
"title": "<string>",
"description": "<string>",
"contact_id": "<string>",
"deal_id": "<string>",
"entity_type": "<string>",
"entity_id": "<string>",
"entity_name": "<string>",
"metadata": {},
"created_by_user_id": "<string>",
"created_date": "<string>"
}
]
},
"meta": {
"page": 123,
"per_page": 123,
"total": 123
}
}Activities
List Contact Activities
Retrieve the full activity timeline for a contact (calls, emails, notes, meetings, AI actions)
GET
/
v1
/
contacts
/
{id}
/
activities
List Contact Activities
curl --request GET \
--url https://api.example.com/v1/contacts/{id}/activitiesimport requests
url = "https://api.example.com/v1/contacts/{id}/activities"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/contacts/{id}/activities', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/contacts/{id}/activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/contacts/{id}/activities"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/contacts/{id}/activities")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/contacts/{id}/activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"activities": [
{
"id": "<string>",
"type": "<string>",
"title": "<string>",
"description": "<string>",
"contact_id": "<string>",
"deal_id": "<string>",
"entity_type": "<string>",
"entity_id": "<string>",
"entity_name": "<string>",
"metadata": {},
"created_by_user_id": "<string>",
"created_date": "<string>"
}
]
},
"meta": {
"page": 123,
"per_page": 123,
"total": 123
}
}Request
Path Parameters
string
required
The contact’s unique ID (UUID)
Query Parameters
integer
default:"1"
Page number for pagination
integer
default:"50"
Activities per page (max: 100)
string
Filter by activity type:
call, email, meeting, note, task, ai_action, deal_stage_change, list_added, campaign_sent, etc.string
Only activities on or after this ISO 8601 timestamp
string
Only activities on or before this ISO 8601 timestamp
Headers
Authorization: Bearer wbk_your_api_key_here
Requires an API key with the
activities:read permission. Activities are returned newest first.Response
object
Show properties
Show properties
array
Array of activity objects, newest first.
Show Activity object
Show Activity object
string
Activity UUID
string
Activity type (see
type filter)string
Short human-readable title
string
Full description or body
string
Linked contact UUID
string
Linked deal UUID (nullable)
string
Type of related entity (
deal, task, email, campaign)string
UUID of related entity
string
Human-readable name of related entity
object
Type-specific metadata (e.g., call duration, meeting attendees, email subject)
string
UUID of the user (or system) that created the activity
string
ISO 8601 timestamp
curl "https://data.leadlex.com/functions/v1/api-gateway/v1/contacts/123e4567-e89b-12d3-a456-426614174000/activities?type=email" \
-H "Authorization: Bearer wbk_your_api_key_here"
import requests
API_KEY = "wbk_your_api_key_here"
BASE_URL = "https://data.leadlex.com/functions/v1/api-gateway"
CONTACT_ID = "123e4567-e89b-12d3-a456-426614174000"
response = requests.get(
f"{BASE_URL}/v1/contacts/{CONTACT_ID}/activities",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"type": "email"},
)
activities = response.json()["data"]["activities"]
const CONTACT_ID = '123e4567-e89b-12d3-a456-426614174000';
const response = await fetch(
`https://data.leadlex.com/functions/v1/api-gateway/v1/contacts/${CONTACT_ID}/activities?type=email`,
{ headers: { 'Authorization': 'Bearer wbk_your_api_key_here' } }
);
Example Response
{
"data": {
"activities": [
{
"id": "act_7f3c4d2a",
"type": "email",
"title": "Sent: Quick question about Acme Corp",
"description": "Hi Jane, ...",
"contact_id": "123e4567-e89b-12d3-a456-426614174000",
"deal_id": "3f8e1d2c-4b5a-6d7e-8f9a-0b1c2d3e4f5a",
"entity_type": "campaign",
"entity_id": "cmp_abc123",
"entity_name": "Q2 GC Outreach",
"metadata": { "opened": true, "replied": false },
"created_by_user_id": "9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d",
"created_date": "2026-04-17T14:23:05Z"
}
]
},
"meta": { "page": 1, "per_page": 50, "total": 87 }
}
Errors
| Status | Code | Description |
|---|---|---|
| 401 | invalid_key | Invalid or expired API key |
| 403 | insufficient_permissions | Missing activities:read permission |
| 404 | contact_not_found | No contact with this ID |
| 429 | rate_limited | Rate limit exceeded |