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"
}
'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"
}
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'
})
};
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'
]),
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}")
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}")
.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}"
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>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}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.
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"
}
'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"
}
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'
})
};
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'
]),
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}")
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}")
.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}"
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>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>"
}
}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. When omitted, the activity has no explicit creator.
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.
Was this page helpful?