curl --request POST \
--url https://api.stardex.ai/v1/person-activities \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"activity_type": "<string>",
"activity_content": "<string>",
"linkedin_url": "<string>",
"email": "jsmith@example.com",
"full_name": "<string>",
"person_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurred_at": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.stardex.ai/v1/person-activities"
payload = {
"activity_type": "<string>",
"activity_content": "<string>",
"linkedin_url": "<string>",
"email": "jsmith@example.com",
"full_name": "<string>",
"person_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurred_at": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
activity_type: '<string>',
activity_content: '<string>',
linkedin_url: '<string>',
email: 'jsmith@example.com',
full_name: '<string>',
person_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
team_member_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
job_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
occurred_at: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.stardex.ai/v1/person-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.stardex.ai/v1/person-activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'activity_type' => '<string>',
'activity_content' => '<string>',
'linkedin_url' => '<string>',
'email' => 'jsmith@example.com',
'full_name' => '<string>',
'person_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'team_member_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'job_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'occurred_at' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.stardex.ai/v1/person-activities"
payload := strings.NewReader("{\n \"activity_type\": \"<string>\",\n \"activity_content\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"full_name\": \"<string>\",\n \"person_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"occurred_at\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.stardex.ai/v1/person-activities")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"activity_type\": \"<string>\",\n \"activity_content\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"full_name\": \"<string>\",\n \"person_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"occurred_at\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/person-activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"activity_type\": \"<string>\",\n \"activity_content\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"full_name\": \"<string>\",\n \"person_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"occurred_at\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "901e2345-e67f-89g0-h123-456789012345",
"person_id": "123e4567-e89b-12d3-a456-426614174000",
"activity_type": "meeting_note"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Create person activity
Create a new activity (note, meeting, email, etc.) and attach it to a person record. The person can be identified by person_id, email, linkedin_url, or full_name — at least one is required.
Job association: Pass optional job_id to link the activity to a specific search. When job_id is provided, the identified person must already be a candidate on that job; otherwise the request returns a 400 error.
Event time: Optional occurred_at records when the event actually happened (ISO 8601). This is distinct from created_at, a system-managed timestamp for when the activity record was written — created_at cannot be set by the caller. If occurred_at is omitted, it defaults to created_at.
Attribution: session and OAuth callers are always recorded as themselves. Pass team_member_id only when authenticating with an API key.
Supported activity types: secondary_note (general note), meeting_note, meeting_transcript, email, interview_note, linkedin_message, text_message, candidate_summary, linkedin_message_response, call_note.
curl --request POST \
--url https://api.stardex.ai/v1/person-activities \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"activity_type": "<string>",
"activity_content": "<string>",
"linkedin_url": "<string>",
"email": "jsmith@example.com",
"full_name": "<string>",
"person_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurred_at": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.stardex.ai/v1/person-activities"
payload = {
"activity_type": "<string>",
"activity_content": "<string>",
"linkedin_url": "<string>",
"email": "jsmith@example.com",
"full_name": "<string>",
"person_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"team_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurred_at": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
activity_type: '<string>',
activity_content: '<string>',
linkedin_url: '<string>',
email: 'jsmith@example.com',
full_name: '<string>',
person_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
team_member_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
job_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
occurred_at: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.stardex.ai/v1/person-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.stardex.ai/v1/person-activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'activity_type' => '<string>',
'activity_content' => '<string>',
'linkedin_url' => '<string>',
'email' => 'jsmith@example.com',
'full_name' => '<string>',
'person_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'team_member_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'job_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'occurred_at' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.stardex.ai/v1/person-activities"
payload := strings.NewReader("{\n \"activity_type\": \"<string>\",\n \"activity_content\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"full_name\": \"<string>\",\n \"person_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"occurred_at\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.stardex.ai/v1/person-activities")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"activity_type\": \"<string>\",\n \"activity_content\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"full_name\": \"<string>\",\n \"person_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"occurred_at\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stardex.ai/v1/person-activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"activity_type\": \"<string>\",\n \"activity_content\": \"<string>\",\n \"linkedin_url\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"full_name\": \"<string>\",\n \"person_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"team_member_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"job_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"occurred_at\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "901e2345-e67f-89g0-h123-456789012345",
"person_id": "123e4567-e89b-12d3-a456-426614174000",
"activity_type": "meeting_note"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Authorizations
Authenticate with a Bearer token: API key, OAuth token, or session token.
Body
Activity type key. Standard values: secondary_note (general note), meeting_note, meeting_transcript, email, interview_note, linkedin_message, text_message, candidate_summary, linkedin_message_response, call_note. Teams can also define custom activity types from Settings → Activity Types; discover the full list (including custom types) with GET /v1/person-activities/types.
1Activity body text. Stored as both HTML and plain text.
LinkedIn profile URL to identify the person.
Email address to identify the person.
Full name to identify the person. Least precise — prefer linkedin_url, email, or person_id.
Person UUID (most precise). Get from POST /v1/persons/search or GET /v1/persons/{id}.
Team member UUID to record as the activity creator. Ignored for session and OAuth callers (the authenticated member is always recorded). Required for API-key auth, which has no implicit member context.
Optional job UUID to associate this activity with a specific search. When provided, the identified person must already have a candidate record on that job — otherwise the request returns a 400 error. Resolve job IDs with POST /v1/jobs/search.
ISO 8601 timestamp for when the event actually occurred (e.g. "2024-01-10T14:00:00Z"). This is distinct from created_at, which is a system-managed timestamp for when the activity record was written and cannot be set by the caller. Use occurred_at to backdate or record the real event time (for example, a meeting that happened last week). If omitted, it defaults to created_at.
Was this page helpful?