DocumentationResumeRequest → UpdateResumeDto
Resume write request
Used by POST and PUT /api/v2/resumes. The resume payload is always nested under the resume key.
Automatisez l'analyse, l'appariement et la génération de CV pour un recrutement efficace et conforme au RGPD.
{{baseapiurl}} Authorization: ApiKey <key>Résumé de la surface API documentée avant la référence détaillée des endpoints.
| Ressource | Endpoints | Chemin de base | Fonctionnalités |
|---|---|---|---|
| Resumes & CV parsing | 6 | /api/v2/resumes | Extended parsing, file parsing, and resume CRUD |
| Jobs | 6 | /api/v2/jobs | File parsing, filters, and job CRUD |
| Recruiter scores | 4 | /api/v2/scores | Stored-resource matching and ranking webhooks |
| PDF generation | 3 | /api/v2/pdf-generation | Settings, single PDF, and webhook batches |
Ces modèles correspondent aux DTO, entités, noms de propriétés Jackson et enveloppes de réponse utilisés par cette page.
DocumentationResumeRequest → UpdateResumeDto
Used by POST and PUT /api/v2/resumes. The resume payload is always nested under the resume key.
ParserResponseDTO
Returned by POST /api/v2/resumes/parser. It is the normalized parser response, not the CVXml resource returned by GET /api/v2/resumes/{resumeId}.
DocumentationService
Create and read return CVXml under resume. Update returns the normalized UpdateResumeDto under resume. CVXml uses legacy French field names.
Job entity
POST and PUT accept the Job entity. PUT replaces the documented fields, so send every value that must be preserved. Server responses may also include id, filePath, pauseReason, jobskills, createdAt, and updatedAt.
DocumentationService / DocumentationJobService
Both list endpoints use the same pagination keys. The collection key differs by resource.
RecruiterScoreDto
Returned by both synchronous matching endpoints and included in ranking-webhook payloads.
ResumeSettings, ColorSettings, SectionSettings, ResumeCanvasImage
Used by PUT /api/v2/pdf-generation/settings. Section id is read-only; canvas image id is generated by the server.
WebhookController.WebhookSettingsDto / DocumentationPdfService
Webhook registration uses recruiter-session authentication. The v2 PDF webhook endpoint returns the accepted batch response shown below.
Parse, create, read, update, and delete resumes owned by the API key user.
These are the exact successful response shapes your client should deserialize. Detailed CVXml and UpdateResumeDto fields remain in the Schemas section.
POST /api/v2/resumes/parser
Send:Send multipart/form-data: file (required), parserType (optional).
Receive:Read the persisted ParserResponseDTO response.
POST /api/v2/resumes
Send:Send application/json. The resume wrapper is required.
Receive:Store id from the created CVXml envelope; it is the resumeId for later calls.
PUT /api/v2/resumes/{resumeId}
Send:Use the same required { resume: ... } wrapper as create.
Receive:The response contains the id and the UpdateResumeDto that was saved.
/api/v2/resumes/parserParse and persist a CV uploaded as a multipart file.
Request
multipart/form-data · file (file) · parserType? (string)
Success
200 · JSON or XML · persisted ParserResponseDTO
curl -X POST "{{baseapiurl}}/api/v2/resumes/parser" \
-H "Authorization: ApiKey YOUR_API_KEY" -H "Accept: application/json" \
-F "file=@resume.pdf" -F "parserType=premium"Response schema
ParserResponseDTO
/api/v2/resumesReturn a paginated collection containing only resumes owned by the API-key user.
Request
query · page? (number, default 0) · size? (number, default 10)
Success
200 · { resumes, currentPage, totalItems, totalPages }
curl -X GET "{{baseapiurl}}/api/v2/resumes?page=0&size=10" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
Paginated resume collection
/api/v2/resumesCreate a structured resume. Send DocumentationResumeRequest ({ resume: UpdateResumeDto }); a CVXml-shaped resource from a read response is also accepted.
Request
application/json · DocumentationResumeRequest
Success
201 · Location: /api/v2/resumes/{id} · { id, resume: CVXml }
curl -X POST "{{baseapiurl}}/api/v2/resumes" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"resume": {"candidate": { "firstName": "Ada", "lastName": "Lovelace", "personalEmail": "ada@example.com" },"profile": "Backend engineer","experiences": [], "educations": [], "languages": [], "skills": [],"softSkills": [], "references": []}}'Response schema
Created resume envelope
/api/v2/resumes/{resumeId}Return one resume when the UUID exists and belongs to the API-key user.
Request
path · resumeId (UUID)
Success
200 · { id, resume: CVXml }
curl -X GET "{{baseapiurl}}/api/v2/resumes/RESUME_UUID" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
Resume envelope
/api/v2/resumes/{resumeId}Update a resume using the same DocumentationResumeRequest wrapper used when creating one.
Request
path · resumeId (UUID) · application/json · DocumentationResumeRequest
Success
200 · { id, resume: UpdateResumeDto }
curl -X PUT "{{baseapiurl}}/api/v2/resumes/RESUME_UUID" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"resume": {"candidate": { "firstName": "Ada", "lastName": "Lovelace", "personalEmail": "ada@example.com" },"profile": "Backend engineer","experiences": [], "educations": [], "languages": [], "skills": [],"softSkills": [], "references": []}}'Response schema
Updated resume envelope
/api/v2/resumes/{resumeId}Delete a resume owned by the API-key user.
Request
path · resumeId (UUID)
Success
204 · no content
curl -X DELETE "{{baseapiurl}}/api/v2/resumes/RESUME_UUID" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
No response body
Parse job files and manage structured job postings for the authenticated user.
/api/v2/jobs/parserParse a job description uploaded as a multipart file and create the resulting job for the authenticated user.
Request
multipart/form-data · file (file)
Success
200 · application/json · created Job
curl -X POST "{{baseapiurl}}/api/v2/jobs/parser" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-F "file=@job-description.pdf"Response schema
Job
/api/v2/jobsReturn a paginated, filterable collection of jobs owned by the API-key user.
Request
query · page? · size? · status? · source? · reference? · title? · postedFrom? · postedTo? (ISO date-time)
Success
200 · { jobs, currentPage, totalItems, totalPages }
curl "{{baseapiurl}}/api/v2/jobs?page=0&size=20&status=ACTIVE&title=engineer" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
Paginated job collection
/api/v2/jobsCreate a structured job posting from the Job entity. The full writable JSON template is in Schemas; the response adds server-generated fields.
Request
application/json · Job object
Success
201 · created Job
curl -X POST "{{baseapiurl}}/api/v2/jobs" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data @job.jsonResponse schema
Job
/api/v2/jobs/{jobIdOrReference}Find a job using either its UUID or its reference, and return it only when owned by the API-key user.
Request
path · jobIdOrReference (UUID or string reference)
Success
200 · Job resource
curl "{{baseapiurl}}/api/v2/jobs/JAVA-001" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
Job
/api/v2/jobs/{jobIdOrReference}Update a job identified by UUID or reference. The backend assigns every documented writable Job field, so send the complete Job payload to avoid clearing values.
Request
path · jobIdOrReference · application/json · Job object
Success
200 · updated Job resource
curl -X PUT "{{baseapiurl}}/api/v2/jobs/JAVA-001" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data @job.jsonResponse schema
Job
/api/v2/jobs/{jobIdOrReference}Delete a job identified by UUID or reference.
Request
path · jobIdOrReference (UUID or string reference)
Success
204 · no content
curl -X DELETE "{{baseapiurl}}/api/v2/jobs/JAVA-001" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
No response body
Run full matches and deliver top candidate or job rankings through webhooks.
/api/v2/scores/matchCalculate a detailed recruiter score for one stored job and one stored resume.
Request
application/json · jobId (UUID) · candidateId (UUID)
Success
200 · RecruiterScoreDto, including final score ID
curl -X POST "{{baseapiurl}}/api/v2/scores/match" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jobId":"JOB_UUID","candidateId":"RESUME_UUID"}'Response schema
RecruiterScoreDto
/api/v2/scores/match/filesParse the supplied resume and job files, persist them, and calculate the detailed match score for the created pair.
Request
multipart/form-data · resumeFile (file) · jobFile (file)
Success
200 · RecruiterScoreDto
curl -X POST "{{baseapiurl}}/api/v2/scores/match/files" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-F "resumeFile=@resume.pdf" \
-F "jobFile=@job.pdf"Response schema
RecruiterScoreDto
/api/v2/scores/jobs/{jobId}/top-candidates/webhookRefresh scores and queue the top 10 fully detailed candidates for a job to the configured webhook.
Request
path · jobId (UUID)
Success
202 · { deliveryId, eventType: "resume.matched", status: "QUEUED", resultCount }
curl -X POST "{{baseapiurl}}/api/v2/scores/jobs/JOB_UUID/top-candidates/webhook" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
Queued webhook delivery
/api/v2/scores/resumes/{resumeId}/top-jobs/webhookQueue the top 10 detailed jobs for a resume to the configured webhook.
Request
path · resumeId (UUID)
Success
202 · { deliveryId, eventType: "resume.matched", status: "QUEUED", resultCount }
curl -X POST "{{baseapiurl}}/api/v2/scores/resumes/RESUME_UUID/top-jobs/webhook" \
-H "Authorization: ApiKey YOUR_API_KEY"Response schema
Queued webhook delivery
Update resume rendering settings and generate one or more resume PDFs.
/api/v2/pdf-generation/settingsUpdate the authenticated user’s ResumeSettings used by PDF rendering. Send the complete settings model when preserving existing values; it includes layout, typography, margins, colors, sections, canvas images, and agency branding.
Request
application/json · ResumeSettings object
Success
200 · updated ResumeSettings
curl -X PUT "{{baseapiurl}}/api/v2/pdf-generation/settings" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data @resume-settings.jsonResponse schema
ResumeSettings
/api/v2/pdf-generation/resumes/{resumeId}Render an owned resume using the current PDF generation settings.
Request
path · resumeId (UUID)
Success
200 · application/pdf · PDF document
curl -X POST "{{baseapiurl}}/api/v2/pdf-generation/resumes/RESUME_UUID" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-o resume.pdfResponse schema
PDF binary
/api/v2/pdf-generation/webhookQueue PDF generation for a list of owned resume UUIDs and deliver the files through the configured webhook.
Request
application/json · array of UUID strings
Success
202 · { jobId, status, total, message, webhookSecurity }
curl -X POST "{{baseapiurl}}/api/v2/pdf-generation/webhook" \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '["RESUME_UUID_1", "RESUME_UUID_2"]'Response schema
Queued PDF webhook batch
Configure signed event deliveries for asynchronous parsing, matching, and PDF generation.
| Operation | Endpoint | Auth |
|---|---|---|
| Read registration | GET /api/webhook | Recruiter session |
| Create or update registration | POST /api/webhook | Recruiter session |
| Rotate signing secret | POST /api/webhook/rotate-secret | Recruiter session |
| Top candidates delivery | POST /api/v2/scores/jobs/{jobId}/top-candidates/webhook | ApiKey |
| Top jobs delivery | POST /api/v2/scores/resumes/{resumeId}/top-jobs/webhook | ApiKey |
| PDF batch delivery | POST /api/v2/pdf-generation/webhook | ApiKey |
Register one HTTPS endpoint and subscribe it to resume.parsed, resume.matched, or pdf.generated. Event deliveries include an ID, timestamp, event header, and an HMAC-SHA256 signature.
{
"webhookUrl": "https://example.com/cvreader",
"events": ["resume.parsed", "resume.matched", "pdf.generated"]
}X-CVReader-Event: resume.matched
X-CVReader-Delivery-Id: <uuid>
X-CVReader-Timestamp: <unix-seconds>
X-CVReader-Signature: v1=<hmac-sha256><timestamp>.<raw-json-body> using HMAC-SHA256, return any 2xx response to acknowledge delivery, and use the delivery ID for idempotency because retries may repeat the same event.