Requires an agency key with
talent_network:write (and talent_network:read to poll). Your agency must have Talent Network management enabled. Without it, both submit endpoints answer 403 (permission_error).1
Upload each resume
POST /resumes takes the PDF as raw base64 (no data: prefix), up to 8 MB decoded, and returns a resumeFileId.resumeFileId. Uploads that are never referenced may eventually be discarded.2
Submit up to 100 candidates
POST /talent-network/candidates/submit-bulk takes an items array of 1 to 100 candidates.The response is always
200, with a batchId and an items array aligned by index with your request:Rejection codes:
missing_required_field, invalid_value, unknown_resume, recruiter_not_found, recruiter_not_approved, agency_owner_unavailable, enqueue_failed.3
Poll the batch
GET /talent-network/batches/{batchId} returns the current outcome of each queued item.queued to processing, then to succeeded (with candidateUserId) or failed (with errorCode and errorMessage). deduplicated is final.Processing includes LinkedIn profile verification and can take tens of seconds per candidate. Poll every 30 to 60 seconds, or less often for large batches, until every item is succeeded, failed, or deduplicated. An item that never completes is failed automatically with ingest_timed_out a few hours after submission.Reading batch results
- Index gaps are expected. Items rejected at submit time get no row in the batch, so
itemCount - items.lengthis the number of request-time rejections. The exception isenqueue_failed, which does appear here asfailed. succeededmeans listed. The candidate is in your talent network as soon as the item succeeds. Rarely, enrichment is retried and the candidate appears shortly after.failedis always resubmittable. Some failures are transient:resume_parse_failed,linkedin_verification_unavailable, andinternal_error.enqueue_failedandingest_timed_outare service-side problems. Resubmitting later should work for all of these. For any other code, the problem is the candidate’s data. Fix the data first.- Unknown codes are terminal. The full list of
errorCodevalues is on the batch reference page. Codes are never renamed, but new ones may be added.
Retries and duplicates
- A candidate comes back
deduplicatedonly while an earlier submission of the same candidate (same attributed recruiter, email, and LinkedIn URL) is stillqueuedorprocessing. Once that earlier submission finishes, resubmitting starts a fresh attempt. - Because attribution is part of that match, a retry must send the same
recruiterEmail. - Items for the same person within one request collapse onto the first one. Later items come back
deduplicated. - With an
Idempotency-Key, a retry within 24 hours replays the original response, including the samebatchId.
Single submissions
For one-off submissions,POST /talent-network/candidates/submit takes one candidate with the resume bytes inline (resume.contentBase64) instead of a resumeFileId. It returns accepted, deduplicated, batchId, and submissionId. Track it as a batch of one with the same batch endpoint.
Before you submit
To avoid resubmitting people already in your network, check them first withPOST /talent-network/candidates/lookup.