curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/targets/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const id = "550e8400-e29b-41d4-a716-446655440000";
const response = await fetch(`https://api.freshtalent.ai/v1/targets/${id}`, {
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);
import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.freshtalent.ai/v1/targets/550e8400-e29b-41d4-a716-446655440000",
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"])
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "company",
"name": "Anduril",
"linkedin_url": "https://www.linkedin.com/company/anduril",
"auto_admit": true,
"watching_count": 38,
"proposed_count": 0,
"excluded_count": 4,
"current_count": 31,
"alum_count": 7,
"enriched_count": 38,
"member_count": 42,
"allocation_used": 38,
"in_graph_count": 0,
"result_limit": null,
"created_at": "2026-09-16T11:43:00.000Z",
"query": { "input": "anduril.com" },
"job": {
"id": "7b1d9b3c-0b8f-4d4d-a8b4-72ef8fbb4c81",
"status": "done",
"phase": "done",
"total": 38,
"completed": 38,
"failed": 0,
"error": null
}
}
}
Get target
Retrieve one Target, its counts, stored query, and latest job summary.
GET
/
targets
/
{id}
curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/targets/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const id = "550e8400-e29b-41d4-a716-446655440000";
const response = await fetch(`https://api.freshtalent.ai/v1/targets/${id}`, {
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);
import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.freshtalent.ai/v1/targets/550e8400-e29b-41d4-a716-446655440000",
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"])
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "company",
"name": "Anduril",
"linkedin_url": "https://www.linkedin.com/company/anduril",
"auto_admit": true,
"watching_count": 38,
"proposed_count": 0,
"excluded_count": 4,
"current_count": 31,
"alum_count": 7,
"enriched_count": 38,
"member_count": 42,
"allocation_used": 38,
"in_graph_count": 0,
"result_limit": null,
"created_at": "2026-09-16T11:43:00.000Z",
"query": { "input": "anduril.com" },
"job": {
"id": "7b1d9b3c-0b8f-4d4d-a8b4-72ef8fbb4c81",
"status": "done",
"phase": "done",
"total": 38,
"completed": 38,
"failed": 0,
"error": null
}
}
}
Returns the Target identified by
No query parameters or body.
id in the authenticated organization’s scope. Reading a Target also promotes any proposed members if auto_admit is already true; it does not start a new discovery job.
Request
string
required
Target UUID. The route does not declare a separate path-schema format, but the stored ID is a UUID.
Response
200 OK returns { "data": Target }. The Target schema is:
| Field | Type | Nullability and meaning |
|---|---|---|
id | string | Non-null Target UUID. |
kind | "company" | "people" | Non-null. |
name | string | Non-null display name. |
linkedin_url | string | Nullable; company LinkedIn URL, or null for people/unresolved company Targets. |
auto_admit | boolean | Non-null. |
watching_count, proposed_count, excluded_count, current_count, alum_count, enriched_count, member_count | integer | Non-null counts. Current/alumni counts include only watching members. |
allocation_used, in_graph_count | integer | Included after graph allocation is attached; in_graph_count is never negative. |
result_limit | integer | Nullable stored discovery cap. |
created_at | string | Non-null ISO timestamp. |
query | object | Non-null stored config/query object. |
job | object | Non-null latest job summary. job.id, job.phase, and job.error are nullable; job.status, totals, completed, and failed are non-null. |
job.status reflects the latest associated ingest job, commonly pending, running, done, or failed. There is no Target-level status property in this response.
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "company",
"name": "Anduril",
"linkedin_url": "https://www.linkedin.com/company/anduril",
"auto_admit": true,
"watching_count": 38,
"proposed_count": 0,
"excluded_count": 4,
"current_count": 31,
"alum_count": 7,
"enriched_count": 38,
"member_count": 42,
"allocation_used": 38,
"in_graph_count": 0,
"result_limit": null,
"created_at": "2026-09-16T11:43:00.000Z",
"query": { "input": "anduril.com" },
"job": {
"id": "7b1d9b3c-0b8f-4d4d-a8b4-72ef8fbb4c81",
"status": "done",
"phase": "done",
"total": 38,
"completed": 38,
"failed": 0,
"error": null
}
}
}
Examples
curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/targets/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const id = "550e8400-e29b-41d4-a716-446655440000";
const response = await fetch(`https://api.freshtalent.ai/v1/targets/${id}`, {
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);
import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.freshtalent.ai/v1/targets/550e8400-e29b-41d4-a716-446655440000",
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"])
Errors and recovery
401 unauthorized,402 payment_required, and platform-key400 invalid_requesthave the shared authentication/access meanings.404 not_foundwith{"error":{"type":"not_found","message":"watch not found"}}means the ID is absent from this organization. Do not retry unchanged.429and5xx: retry this read with bounded backoff and honorRetry-After.
Lifecycle and side effects
This is a read, but it calls the service’s auto-admit reconciliation. If the Target hasauto_admit: true, proposed members are moved to watching and the default lists are synchronized. That transition is not a completion guarantee for enrichment or Monitoring. The route then loads the latest job and attaches graph allocation counts.
Next
- List target members for member rows, filters, and pagination.
- Update target to rename it or change
auto_admit. - Retry target when its latest job is failed.