Talentino Docs
API ReferencePartner API v1

Create a Job Match and start scoring

POST/job-matches

Creates and launches a Job Match from one job position document plus candidates. Candidates are existing Resume IDs (in the caller's Business Unit) and/or fresh Resume documents uploaded inline. At least one candidate is required.

Requirements are extracted from the job document via the existing LLM flow, all candidates are committed straight to scoring (API Job Matches never pause in the draft staging step), and the scoring pipeline is kicked off — it creates the Job Position asynchronously, processes fresh Resumes, computes each Resume Score, and flips the Job Match status to ongoing (conformity_decision defaults to score_all).

In multipart, supply the job document as a job_document file XOR a job_document_url field; resume_ids may be repeated integer fields and/or a JSON-array string ("[1,2,3]"); fresh documents use repeated files/urls (max 50, same convention as bulk import). In JSON, supply job_document_url plus optional resume_ids, urls, and match_name.

data.job_position_id is always null at creation (the Job Position is created asynchronously). data.fresh_resumes is a per-item report for fresh documents (same shape as bulk import). The response is 422 when every fresh document failed and no existing IDs were supplied (no candidates to score — nothing created), or when requirements extraction failed.

Authorization

ApiKeyBearer
AuthorizationBearer <token>

Business Unit-scoped Partner API Key, issued from Talentino settings and shown once at creation. Send it as Authorization: Bearer tlt_…. Limited to 60 requests per minute per key.

In: header

Request Body

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/job-matches" \  -H "Content-Type: application/json" \  -d '{    "job_document_url": "https://files.example.com/jobs/backend-engineer.pdf",    "resume_ids": [      90871,      90872    ],    "match_name": "Backend Engineer - Q3"  }'
{  "message": "Job match created and scoring started",  "success": true,  "data": {    "job_match_id": 5521,    "job_position_id": null,    "resume_ids": [      90871,      90872,      90873    ],    "fresh_resumes": [      {        "index": 0,        "source": "url",        "filename_or_url": "https://files.example.com/cv/new-candidate.pdf",        "status": "accepted",        "resume_id": 90873      }    ]  }}
{  "error": "Invalid or revoked API key",  "success": false}
{  "error": "Invalid or revoked API key",  "success": false}
{  "error": "Insufficient credits to process this request",  "success": false}
{  "error": "Invalid or revoked API key",  "success": false}
{  "error": "Invalid or revoked API key",  "success": false}
{  "error": "Invalid or revoked API key",  "success": false}
{  "error": "All fresh resume documents failed — no candidates to score. Nothing was created.",  "success": false,  "data": {    "fresh_resumes": [      {        "index": 0,        "source": "url",        "filename_or_url": "https://files.example.com/cv/broken.pdf",        "status": "failed",        "error": "DocumentFetchFailed: upstream returned 404"      }    ]  }}
{  "error": "Rate limit exceeded for partner API",  "success": false}
{  "error": "Invalid or revoked API key",  "success": false}
{  "error": "Invalid or revoked API key",  "success": false}