Skip to main content
Required scopes: talent_network:read
Rate limit: default tier, 120 requests per minute per key
Reads the recruiter-entered preferences of up to 50 candidates in one call — the batch form of GET /talent-network/candidates/{candidateUserId}/preferences, for CRMs that mirror a whole list rather than one candidate at a time. These are the same values a recruiter manages in-app, and the source that always wins for ParaAI matching. Each item references a candidate by candidateUserId (from GET /talent-network/candidates or POST /talent-network/candidates/lookup), or by email / linkedinUrl. candidateUserId wins when both are given; otherwise linkedinUrl beats email, the same precedence lookup documents. Any candidate owned by an approved member of your agency is addressable — deliberately wider than the membership list, so off-market or expired candidates are readable too. An identity reference resolves to EVERY membership row your agency holds for that person, so candidates can carry more than one entry: a candidate two of your recruiters own has a separate, independently editable preferences row per owner, each listed with its own candidateUserId. Entries are ordered by ParaAI eligibility expiry, latest first, with rows that have no expiry last. Do not assume a single entry — read them all, or pick by candidateUserId. results is index-aligned with candidates and the request answers 200, so branch on per-item ok. status is found (candidates lists one entry per owning membership row) or not_found (no candidate owned by an approved member of your agency matches this reference, indistinguishable from a candidate that does not exist). Values are never rejected: an unparseable linkedinUrl, an unknown email, or an item naming no candidate at all — null fields read as omitted — answers not_found at its own index, so one bad value never costs you the rest of the batch. Only schema violations fail the whole request with 400, as on every endpoint: fields must carry their documented JSON types, and candidateUserId, when present, must be a non-empty string. Statuses are never renamed but new ones may be added — branch on ok and treat an unknown status as informational. An entry’s preferences is null when that membership row has no recruiter-entered preferences yet (possible for candidates who entered the network via a role submission) — exactly what the single-candidate GET returns for it. Candidates predating today’s validation may read back null numbers or empty arrays. This endpoint only reads; it never creates or modifies anything and takes no Idempotency-Key. Duplicate references in one request get the same answer at every index.

Body

object[]
required
Constraints: min items 1, max items 50.

Response

object[]
required