curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/me" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const response = await fetch("https://api.freshtalent.ai/v1/me", {
signal: AbortSignal.timeout(30_000), headers: { Authorization: `Bearer ${process.env.FRESHTALENT_API_KEY}` },
});
if (!response.ok) throw new Error(`FreshTalent HTTP ${response.status}`);
const account = (await response.json()).data;
console.log(account.org.slug, account.quota.watch_slots.remaining);
import json
import os
from urllib.request import Request, urlopen
request = Request(
"https://api.freshtalent.ai/v1/me",
headers={"Authorization": "Bearer " + os.environ["FRESHTALENT_API_KEY"]},
)
with urlopen(request, timeout=30) as response:
account = json.load(response)["data"]
print(account["org"]["slug"], account["quota"]["watch_slots"]["remaining"])
Get account
Authenticated organization, access, plan, quotas, webhook configuration, Slack status, and notification preferences.
GET
/
me
curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/me" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const response = await fetch("https://api.freshtalent.ai/v1/me", {
signal: AbortSignal.timeout(30_000), headers: { Authorization: `Bearer ${process.env.FRESHTALENT_API_KEY}` },
});
if (!response.ok) throw new Error(`FreshTalent HTTP ${response.status}`);
const account = (await response.json()).data;
console.log(account.org.slug, account.quota.watch_slots.remaining);
import json
import os
from urllib.request import Request, urlopen
request = Request(
"https://api.freshtalent.ai/v1/me",
headers={"Authorization": "Bearer " + os.environ["FRESHTALENT_API_KEY"]},
)
with urlopen(request, timeout=30) as response:
account = json.load(response)["data"]
print(account["org"]["slug"], account["quota"]["watch_slots"]["remaining"])
Returns the authenticated organization’s account summary. It is read-only: the request does not change quotas, notification preferences, webhook settings, or Slack state. Customer API keys are scoped to their own organization; the platform key can use
This endpoint does not require active subscription access, so a valid key can still read
This read is safe to retry on transient network failure,
X-FreshTalent-Org-Id as described in Authentication.
This endpoint reports the configured default webhook URL as a boolean only. The Gateway does not push events to that URL. Poll List events for membership-scoped profile diffs.
Inputs
There are no path parameters, query parameters, or request body fields.Response
200
{
"data": {
"org": {
"id": "a7590925-3e96-4f89-898c-bf7ed02fbd97",
"name": "Acme",
"slug": "acme",
"plan": "unlimited",
"trial_ends_at": null
},
"access": { "allowed": true },
"quota": {
"daily_uniques": {
"limit": null,
"remaining": null,
"enforced": false
},
"watch_slots": {
"included": 1000,
"used": 234,
"max": 1000,
"remaining": 766
}
},
"webhook": { "configured": true },
"slack": { "connected": true, "team_name": "Acme" },
"signals": {
"fields": [
"open_to_work",
"between_roles",
"left_company",
"joined_company",
"removed_position"
],
"email_enabled": true,
"slack_enabled": true
}
}
}
access.allowed: false after a trial ends.
Schema details:
-
org.idis a UUID string;org.name,org.slug, andorg.planare strings.signals.fieldsandsignals.emailsare not interchangeable: this summary returns field names, not recipient addresses. -
org.trial_ends_atandslack.team_namearestring | null.access.allowedand all other booleans are non-nullable. -
quota.daily_uniques.limitand.remainingareinteger | null;.enforcedis currently alwaysfalsein the Gateway response. -
quota.watch_slots.included,.used,.max, and.remainingare integers.usedcounts distinctwatchingLinkedIn URLs that are not already represented in the index graph.remainingis never below zero. -
watch_slots.includedis0forfreeandindex, and1000forunlimited.maxuses a positive organizationmax_people_monitoredsetting when present, otherwise the plan inclusion when positive, otherwise the default1000. -
webhook.configuredmeans a default webhook URL exists in the organization settings. The URL and secret are never returned here. -
signals.fieldscontains the stored, deduplicated signal field names. The Gateway recognizesopen_to_work,between_roles,exploring,left_company,joined_company,removed_position,headline,about, androle_description.email_enabledandslack_enabledare booleans.
Errors and retries
| Status | Meaning | Recovery |
|---|---|---|
400 | Invalid platform-org scoping header | Send a valid UUID in X-FreshTalent-Org-Id, or omit it for a customer key. |
401 | Missing, malformed, or revoked API key | Supply a valid key. |
429 | Shared Gateway limit exceeded | Honor Retry-After and back off. |
5xx | Gateway or dependency failure | Retry this read with bounded backoff. |
429, or 5xx. Do not retry 400 or 401 unchanged. The default Gateway limit is 300 requests per minute per client IP, not per API key.
curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/me" \
-H "Authorization: Bearer $FRESHTALENT_API_KEY"
const response = await fetch("https://api.freshtalent.ai/v1/me", {
signal: AbortSignal.timeout(30_000), headers: { Authorization: `Bearer ${process.env.FRESHTALENT_API_KEY}` },
});
if (!response.ok) throw new Error(`FreshTalent HTTP ${response.status}`);
const account = (await response.json()).data;
console.log(account.org.slug, account.quota.watch_slots.remaining);
import json
import os
from urllib.request import Request, urlopen
request = Request(
"https://api.freshtalent.ai/v1/me",
headers={"Authorization": "Bearer " + os.environ["FRESHTALENT_API_KEY"]},
)
with urlopen(request, timeout=30) as response:
account = json.load(response)["data"]
print(account["org"]["slug"], account["quota"]["watch_slots"]["remaining"])