C·VCV Parsing/ developer platform

API VERSION 1 SYNCHRONOUS RESPONSE

A CV becomes
usable data.

Turn a PDF, DOCX or image CV into a structured candidate profile. Get contact details, work preferences, supported international codes and candidate-photo extraction in one response.

Evidence-first dataPhoto extraction includedHosted in the EU
● DOCUMENT INPUTPDF · DOCX · IMAGE
PARSE
JSON OUTPUTv1 candidate profile
Supported inputPDF documentDOCX text + embedded imagesPNG / JPEG imageUp to 15 MiB

Full document tracing is off by default. An administrator can enable temporary capture of uploaded CVs, model responses and parsed profiles for diagnostics. Trace access is restricted to administrators. AI-provider retention and data location must be verified separately.

A STRUCTURED RESPONSE

Readable facts.
Portable codes.

Each classified value names its codeSystem. Keep the human-readable fact and its standard code together in one structured profile.

01

Location and languageCountries and regions use ISO 3166 where supported. Languages can carry ISO 639-1 and ISO 639-3 together: zh identifies Chinese broadly; cmn identifies Mandarin.

02

Qualifications and language levelEducation can carry ISCED 2011 and supported national codes. Stated language levels use LinkedIn codes. Unclear classifications stay empty.

03

Usable contactsCandidate email passes a format check. Phone numbers use E.164 when the country is known; otherwise, a complete national number keeps its NATIONAL label. Links use absolute URLs.

04

Atomic work preferencesFull dates use ISO 8601. Availability, weekly hours, salary range, gross/net basis and pay period have separate fields. Currency uses ISO 4217; travel distance uses a UCUM unit.

05

No invented personal factsUnsupported values remain null. Sex uses ISO/IEC 5218 only when stated. Candidate-photo extraction runs with parsing; a portrait is included when detected in time.

Fictional cross-border example: John lives in Berlin and studied in Venlo. The tiny PNG in candidatePhoto.dataUrl shows the response format; a real detected portrait is much larger. Email format checks do not verify mailbox ownership or delivery.

Example response200 OK · application/json
{
  "schemaVersion": "1.0",
  "identity": {
    "firstName": "John",
    "lastName": "Doe",
    "birthDate": "1990-05-14",
    "birthPlace": "Berlin",
    "birthCountry": { "name": "Germany", "code": "DE", "codeSystem": "ISO-3166-1-alpha-2" },
    "citizenships": [{ "name": "German", "code": "DE", "codeSystem": "ISO-3166-1-alpha-2" }],
    "sex": { "name": "Male", "code": "1", "codeSystem": "ISO/IEC 5218" },
    "maritalStatus": "single"
  },
  "contacts": {
    "email": "john.doe@example.com",
    "phones": [
      { "type": "mobile", "value": "+4915123456789", "format": "E.164" },
      { "type": "phone", "value": "+49301234567", "format": "E.164" }
    ],
    "links": [{ "type": "linkedin", "url": "https://www.linkedin.com/in/example-john-doe/" }]
  },
  "address": {
    "street": "Beispielstraße",
    "houseNumber": "12",
    "postalCode": "10115",
    "city": "Berlin",
    "region": { "name": "Berlin", "code": "DE-BE", "codeSystem": "ISO-3166-2" },
    "country": { "name": "Germany", "code": "DE", "codeSystem": "ISO-3166-1-alpha-2" }
  },
  "languages": [
    {
      "language": {
        "name": "German",
        "codes": [
          { "code": "de", "codeSystem": "ISO-639-1" },
          { "code": "deu", "codeSystem": "ISO-639-3" }
        ]
      },
      "level": { "name": "Native", "code": "NATIVE_OR_BILINGUAL", "codeSystem": "LinkedIn" }
    },
    {
      "language": {
        "name": "English",
        "codes": [
          { "code": "en", "codeSystem": "ISO-639-1" },
          { "code": "eng", "codeSystem": "ISO-639-3" }
        ]
      },
      "level": { "name": "Full professional", "code": "FULL_PROFESSIONAL", "codeSystem": "LinkedIn" }
    },
    {
      "language": {
        "name": "Mandarin Chinese",
        "codes": [
          { "code": "zh", "codeSystem": "ISO-639-1" },
          { "code": "cmn", "codeSystem": "ISO-639-3" }
        ]
      },
      "level": { "name": "Limited working", "code": "LIMITED_WORKING", "codeSystem": "LinkedIn" }
    }
  ],
  "education": {
    "country": { "name": "Netherlands", "code": "NL", "codeSystem": "ISO-3166-1-alpha-2" },
    "nationalCategory": { "name": "Hbo bachelor", "code": "3112", "codeSystem": "SOI-2021" },
    "qualificationLevel": { "name": "Level 6", "code": "6", "codeSystem": "NLQF" },
    "internationalLevel": { "name": "Bachelor's degree", "code": "6", "codeSystem": "ISCED-2011" },
    "sourceText": "Hbo bachelor, Fontys University of Applied Sciences, Venlo"
  },
  "employmentPreferences": {
    "availability": { "type": "date", "date": "2026-11-01", "text": null },
    "noticePeriod": { "value": 1, "unit": "month", "text": null },
    "hoursPerWeek": { "minimum": 32, "maximum": 40, "text": null },
    "salary": {
      "minimum": 65000,
      "maximum": 80000,
      "currency": { "name": null, "code": "EUR", "codeSystem": "ISO-4217" },
      "period": "year",
      "basis": "gross",
      "text": null
    },
    "maximumTravelDistance": { "value": 25, "unit": { "code": "km", "codeSystem": "UCUM" } }
  },
  "candidatePhoto": {
    "dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9JqfQAAAAASUVORK5CYII="
  }
}

QUICK START

One upload.
One JSON profile.

Send a multipart file and an X-Api-Key header to /api/v1/cv/parse/. The response arrives in the same request.

Read your quota with GET /api/v1/usage and the same X-Api-Key. New trials allow 10 requests, 20 per minute, and 3 concurrent parses. An exhausted key can still read usage.

No browser upload on this page. Use the interactive API reference to inspect fields and try a request.

POST /api/v1/cv/parse/cURL
# Replace the host, key and path.
curl -X POST 'https://your-host/api/v1/cv/parse/' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -F 'file=@candidate.pdf'