curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/targets" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const response = await fetch("https://api.freshtalent.ai/v1/targets", {
signal: AbortSignal.timeout(30_000), headers: { Authorization: `Bearer ${process.env.FRESHTALENT_API_KEY}` },
});
const body = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${JSON.stringify(body)}`);
console.log(body.data, body.meta.count);
import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.freshtalent.ai/v1/targets",
headers={"Authorization": f"Bearer {os.environ['FRESHTALENT_API_KEY']}"},
)
with urllib.request.urlopen(request, timeout=30) as response:
body = json.load(response)
print(body["data"], body["meta"]["count"])
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "people",
"name": "Palantir FDE leavers",
"linkedin_url": null,
"auto_admit": false,
"watching_count": 0,
"proposed_count": 12,
"excluded_count": 0,
"current_count": 0,
"alum_count": 0,
"enriched_count": 0,
"member_count": 12,
"allocation_used": 0,
"in_graph_count": 0,
"result_limit": 80,
"created_at": "2026-09-16T11:43:00.000Z",
"query": { "input": "Palantir FDE leavers", "filters": { "recently_changed_jobs": true }, "result_limit": 80 },
"job": {
"id": "7b1d9b3c-0b8f-4d4d-a8b4-72ef8fbb4c81",
"status": "pending",
"phase": "queued",
"total": 0,
"completed": 0,
"failed": 0,
"error": null
}
}
],
"meta": { "count": 1 }
}
List targets
List the authenticated organization’s people-search and company-network Targets.
GET
/
targets
curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/targets" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const response = await fetch("https://api.freshtalent.ai/v1/targets", {
signal: AbortSignal.timeout(30_000), headers: { Authorization: `Bearer ${process.env.FRESHTALENT_API_KEY}` },
});
const body = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${JSON.stringify(body)}`);
console.log(body.data, body.meta.count);
import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.freshtalent.ai/v1/targets",
headers={"Authorization": f"Bearer {os.environ['FRESHTALENT_API_KEY']}"},
)
with urllib.request.urlopen(request, timeout=30) as response:
body = json.load(response)
print(body["data"], body["meta"]["count"])
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "people",
"name": "Palantir FDE leavers",
"linkedin_url": null,
"auto_admit": false,
"watching_count": 0,
"proposed_count": 12,
"excluded_count": 0,
"current_count": 0,
"alum_count": 0,
"enriched_count": 0,
"member_count": 12,
"allocation_used": 0,
"in_graph_count": 0,
"result_limit": 80,
"created_at": "2026-09-16T11:43:00.000Z",
"query": { "input": "Palantir FDE leavers", "filters": { "recently_changed_jobs": true }, "result_limit": 80 },
"job": {
"id": "7b1d9b3c-0b8f-4d4d-a8b4-72ef8fbb4c81",
"status": "pending",
"phase": "queued",
"total": 0,
"completed": 0,
"failed": 0,
"error": null
}
}
],
"meta": { "count": 1 }
}
Returns every Target visible to the API key’s organization. This is a metadata and job-progress list; it does not return member rows. Reading it also reconciles auto-admission: Targets with
The service orders Targets by
auto_admit: true can have existing proposed members promoted and generated lists synchronized. A Target member is in Monitoring only when its status is watching. proposed and excluded members remain part of the Target but are not monitored.
Request
No path, query, or body parameters.Every Target route requires
Authorization: Bearer <api key>. A platform key must also send X-FreshTalent-Org-Id with a UUID. The organization must have active access.Response
200 OK returns { "data": Target[], "meta": { "count": integer } }. There is no server pagination or next URL for this endpoint; meta.count is the number of returned Targets.
Each Target has this shape:
| Field | Type | Nullability and meaning |
|---|---|---|
id | string | Target UUID; non-null. |
kind | "company" | "people" | Non-null discriminator. |
name | string | Non-null display name. |
linkedin_url | string | Nullable; resolved company LinkedIn URL, or null for people Targets and unresolved companies. |
auto_admit | boolean | Non-null; defaults to false at creation. |
watching_count, proposed_count, excluded_count, current_count, alum_count, enriched_count, member_count | integer | Non-null counts. current_count and alum_count count only watching members. |
allocation_used, in_graph_count | integer | Included by this route. allocation_used counts watching members outside the index; in_graph_count is max(0, watching_count - allocation_used). |
result_limit | integer | Nullable. Stored discovery cap when the create request set one; null means the deployment default. |
created_at | string | Non-null ISO timestamp. |
query | object | Non-null stored query/config object; may be {} for a company Target. |
job | object | Non-null latest job summary. |
job.id | string | Nullable until a job is associated. |
job.status | string | Non-null current job status, such as pending, running, done, or failed. |
job.phase | string | Nullable progress phase. |
job.total, job.completed, job.failed | integer | Non-null progress counts. |
job.error | string | Nullable; latest job error. |
created_at descending.
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "people",
"name": "Palantir FDE leavers",
"linkedin_url": null,
"auto_admit": false,
"watching_count": 0,
"proposed_count": 12,
"excluded_count": 0,
"current_count": 0,
"alum_count": 0,
"enriched_count": 0,
"member_count": 12,
"allocation_used": 0,
"in_graph_count": 0,
"result_limit": 80,
"created_at": "2026-09-16T11:43:00.000Z",
"query": { "input": "Palantir FDE leavers", "filters": { "recently_changed_jobs": true }, "result_limit": 80 },
"job": {
"id": "7b1d9b3c-0b8f-4d4d-a8b4-72ef8fbb4c81",
"status": "pending",
"phase": "queued",
"total": 0,
"completed": 0,
"failed": 0,
"error": null
}
}
],
"meta": { "count": 1 }
}
Examples
curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/targets" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const response = await fetch("https://api.freshtalent.ai/v1/targets", {
signal: AbortSignal.timeout(30_000), headers: { Authorization: `Bearer ${process.env.FRESHTALENT_API_KEY}` },
});
const body = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${JSON.stringify(body)}`);
console.log(body.data, body.meta.count);
import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.freshtalent.ai/v1/targets",
headers={"Authorization": f"Bearer {os.environ['FRESHTALENT_API_KEY']}"},
)
with urllib.request.urlopen(request, timeout=30) as response:
body = json.load(response)
print(body["data"], body["meta"]["count"])
Errors and recovery
401 unauthorized: missing, invalid, or revoked API key. Fix authentication.400 invalid_request: a platform key is missingX-FreshTalent-Org-Idor the header is not a UUID. Fix the header.402 payment_required: the organization is locked after its trial. Subscribe before retrying.429or5xx: use bounded backoff and honorRetry-Afterfor429. Reads are safe to retry; do not assume a failed response means the collection was empty.
Next
- Get a target for one Target and its latest job summary.
- List target members for filtered, paginated member rows.
- Create a target to add a standing search or company network.