Document schemas · Identity & KYC
Identity & KYC Schemas
This page previews the prebuilt extractors for the French and international identity documents used in KYC and onboarding (identity cards, passports, driving licences and residence documents), with their field contracts and machine-readable zone parsing. Any document type below can also be processed with a custom extractor returning your own schema.
The part_type values and field layouts on this page describe Holofin's upcoming prebuilt extractors for these document types. They are not yet emitted by workflow runs.
If your workflow processes one of these document types with a custom extractor, each extracted part carries that extractor's own part_type and schema, which may differ from this page.
The authoritative schema is the one defined on the extractor in your workflow configuration.
National Identity Card (Carte nationale d'identité)
fr_carte_nationale_identitePreviewIdentity & KYCThe Carte nationale d'identité (CNI) is the French national identity card. The extraction returns the cardholder identity, the document numbers and dates, and the parsed machine-readable zone (MRZ). It is used to establish and verify the identity of a natural person during onboarding and KYC review.
Document structure
The CNI contains:
- Holder identity: Surname, given names, gender, date and place of birth, nationality
- Document details: Card number, issue date, expiry date, issuing authority
- Physical attributes: Height when printed on the card
- Machine-readable zone: The TD1 (current, three-line) or legacy two-line French format printed on the reverse
Data structure
Within the document_parts array, the fr_carte_nationale_identite data object contains:
{
"last_name": "MARTIN",
"first_names": ["Camille", "Alex"],
"gender": "F",
"birth_date": "1990-05-12",
"birth_place": "LYON (69)",
"nationality": "FRA",
"document_number": "SPECIMEN0000",
"issue_date": "2021-06-01",
"expiry_date": "2031-05-31",
"issuing_authority": "Préfecture du Rhône",
"height_cm": 170,
"mrz": {
"format": "TD1",
"lines": [
"IDFRASPECIMEN0000<<<<<<<<<<<<<<",
"9005120F3105319FRA<<<<<<<<<<<4",
"MARTIN<<CAMILLE<ALEX<<<<<<<<<<<"
]
}
}Field reference
| Field | Type | Description |
|---|---|---|
| last_name | string | Cardholder surname (nom) |
| first_names | array of strings | Given names (prénoms) in printed order |
| gender | string | Sex as printed: F or M |
| birth_date | date (ISO 8601 string) | Date of birth (YYYY-MM-DD) |
| birth_place | string | Place of birth as printed (commune and department code) |
| nationality | string | Nationality as an ISO 3166-1 alpha-3 code (e.g. FRA) |
| document_number | string | Card number as printed on the document |
| issue_date | date (ISO 8601 string) | Date the card was issued |
| expiry_date | date (ISO 8601 string) | Date the card expires |
| issuing_authority | string | Authority that issued the card (e.g. a préfecture) |
| height_cm | number | null | Holder height in centimetres when printed, otherwise null |
| mrz | object | Parsed machine-readable zone (see below) |
| mrz.format | string | MRZ layout: TD1 (current three-line card) or legacy_2x36 (former two-line French format) |
| mrz.lines | array of strings | Raw MRZ lines as read from the document |
Validation
Extraction results include a validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Passport (Passeport)
passportPreviewIdentity & KYCThe Passport (passeport) is an international travel and identity document. The extraction returns the holder identity, the passport number and dates, the issuing country and authority, and the parsed TD3 machine-readable zone. It is used to establish and verify the identity of a natural person during onboarding and KYC review.
Document structure
The passport contains:
- Document type: Document code and issuing country
- Holder identity: Surname, given names, nationality, gender, date and place of birth
- Document details: Passport number, issue date, expiry date, issuing authority
- Machine-readable zone: The two-line TD3 format printed at the foot of the identity page
Data structure
Within the document_parts array, the passport data object contains:
{
"document_code": "P",
"issuing_country": "FRA",
"passport_number": "SPECIMEN0000",
"last_name": "MARTIN",
"first_names": ["Camille", "Alex"],
"nationality": "FRA",
"birth_date": "1990-05-12",
"gender": "F",
"birth_place": "LYON",
"issue_date": "2022-09-15",
"expiry_date": "2032-09-14",
"authority": "Préfecture du Rhône",
"mrz": {
"format": "TD3",
"lines": [
"P<FRAMARTIN<<CAMILLE<ALEX<<<<<<<<<<<<<<<",
"SPECIMEN00004FRA9005120F3209147<<<<<<<<<<<<<<06"
]
}
}Field reference
| Field | Type | Description |
|---|---|---|
| document_code | string | Document type code, P for a passport |
| issuing_country | string | Issuing country as an ISO 3166-1 alpha-3 code (e.g. FRA) |
| passport_number | string | Passport number as printed on the document |
| last_name | string | Holder surname (nom) |
| first_names | array of strings | Given names (prénoms) in printed order |
| nationality | string | Holder nationality as an ISO 3166-1 alpha-3 code |
| birth_date | date (ISO 8601 string) | Date of birth (YYYY-MM-DD) |
| gender | string | Sex as printed: F or M |
| birth_place | string | Place of birth as printed |
| issue_date | date (ISO 8601 string) | Date the passport was issued |
| expiry_date | date (ISO 8601 string) | Date the passport expires |
| authority | string | Authority that issued the passport |
| mrz | object | Parsed machine-readable zone (see below) |
| mrz.format | string | MRZ layout, TD3 for a passport |
| mrz.lines | array of 2 strings | Raw MRZ lines as read from the document |
Validation
Extraction results include a validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Driving Licence (Permis de conduire)
fr_permis_conduirePreviewIdentity & KYCThe Permis de conduire is the French driving licence. The extraction returns the holder identity, the licence number and dates, the issuing authority, and the list of vehicle categories with their own dates and restrictions. It is used as a supporting identity document during onboarding and KYC review.
Document structure
The driving licence contains:
- Holder identity: Surname, given names, date and place of birth
- Document details: Licence number, issue date, expiry date, issuing authority
- Categories: One entry per vehicle category with its obtained date, validity, and restrictions
Data structure
Within the document_parts array, the fr_permis_conduire data object contains:
{
"last_name": "MARTIN",
"first_names": ["Camille", "Alex"],
"birth_date": "1990-05-12",
"birth_place": "LYON",
"licence_number": "SPECIMEN0000",
"issue_date": "2010-07-20",
"expiry_date": "2025-07-19",
"issuing_authority": "Préfecture du Rhône",
"categories": [
{
"code": "B",
"obtained_date": "2010-07-20",
"valid_until": null,
"restrictions": []
},
{
"code": "A2",
"obtained_date": "2018-03-05",
"valid_until": null,
"restrictions": ["01"]
}
]
}Field reference
| Field | Type | Description |
|---|---|---|
| last_name | string | Holder surname (nom) |
| first_names | array of strings | Given names (prénoms) in printed order |
| birth_date | date (ISO 8601 string) | Date of birth (YYYY-MM-DD) |
| birth_place | string | Place of birth as printed |
| licence_number | string | Licence number as printed on the document |
| issue_date | date (ISO 8601 string) | Date the licence was issued |
| expiry_date | date (ISO 8601 string) | Date the licence expires |
| issuing_authority | string | Authority that issued the licence |
| categories | array of objects | Vehicle categories held (see below) |
| categories[].code | string | Category code (e.g. A, A2, B, C, D) |
| categories[].obtained_date | date (ISO 8601 string) | Date the category was obtained |
| categories[].valid_until | date (ISO 8601 string) | null | Category validity end date, or null when unrestricted |
| categories[].restrictions | array of strings | Harmonised restriction codes for the category (may be empty) |
Validation
Extraction results include a validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Residence Permit (Titre de séjour)
fr_titre_sejourPreviewIdentity & KYCThe Titre de séjour is the French residence permit issued to foreign nationals. The extraction returns the holder identity, the permit number, type and mention, the validity dates, the issuing prefecture, and the parsed machine-readable zone. It is used to establish identity and residence status during onboarding and KYC review.
Document structure
The residence permit contains:
- Holder identity: Surname, given names, date and place of birth, nationality
- Permit details: Permit number, permit type, the mention printed on the card
- Validity: Start and end dates, issuing prefecture
- Machine-readable zone: The MRZ printed on the reverse of the card
Data structure
Within the document_parts array, the fr_titre_sejour data object contains:
{
"last_name": "MARTIN",
"first_names": ["Camille", "Alex"],
"birth_date": "1990-05-12",
"birth_place": "DAKAR",
"nationality": "SEN",
"permit_number": "SPECIMEN0000",
"permit_type": "Carte de séjour pluriannuelle",
"mention": "Salarié",
"valid_from": "2023-01-10",
"valid_until": "2027-01-09",
"issuing_prefecture": "Préfecture du Rhône",
"mrz": {
"format": "TD1",
"lines": [
"ITFRASPECIMEN0000<<<<<<<<<<<<<<",
"9005120F2701099SEN<<<<<<<<<<<2",
"MARTIN<<CAMILLE<ALEX<<<<<<<<<<<"
]
}
}Field reference
| Field | Type | Description |
|---|---|---|
| last_name | string | Holder surname (nom) |
| first_names | array of strings | Given names (prénoms) in printed order |
| birth_date | date (ISO 8601 string) | Date of birth (YYYY-MM-DD) |
| birth_place | string | Place of birth as printed |
| nationality | string | Holder nationality as an ISO 3166-1 alpha-3 code |
| permit_number | string | Permit number as printed on the document |
| permit_type | string | Category of permit (e.g. carte de séjour temporaire, carte de séjour pluriannuelle) |
| mention | string | Mention printed on the card describing the grounds of stay (e.g. Salarié, Étudiant, Vie privée et familiale) |
| valid_from | date (ISO 8601 string) | Start date of the permit validity |
| valid_until | date (ISO 8601 string) | End date of the permit validity |
| issuing_prefecture | string | Prefecture that issued the permit |
| mrz | object | Parsed machine-readable zone with format and lines |
Validation
Extraction results include a validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Resident Card (Carte de résident)
fr_carte_residentPreviewIdentity & KYCThe Carte de résident is the long-duration French resident card, typically valid for ten years or issued as an EU long-term resident card. The extraction returns the holder identity, the card number and type, the validity dates, the issuing prefecture, and the parsed machine-readable zone. It is used to establish identity and residence status during onboarding and KYC review.
Document structure
The resident card contains:
- Holder identity: Surname, given names, date and place of birth, nationality
- Card details: Card number and card type
- Validity: Start and end dates, issuing prefecture
- Machine-readable zone: The MRZ printed on the reverse of the card
Data structure
Within the document_parts array, the fr_carte_resident data object contains:
{
"last_name": "MARTIN",
"first_names": ["Camille", "Alex"],
"birth_date": "1990-05-12",
"birth_place": "DAKAR",
"nationality": "SEN",
"card_number": "SPECIMEN0000",
"card_type": "resident_10_years",
"valid_from": "2022-04-01",
"valid_until": "2032-03-31",
"issuing_prefecture": "Préfecture du Rhône",
"mrz": {
"format": "TD1",
"lines": [
"ITFRASPECIMEN0000<<<<<<<<<<<<<<",
"9005120F3203319SEN<<<<<<<<<<<8",
"MARTIN<<CAMILLE<ALEX<<<<<<<<<<<"
]
}
}Field reference
| Field | Type | Description |
|---|---|---|
| last_name | string | Holder surname (nom) |
| first_names | array of strings | Given names (prénoms) in printed order |
| birth_date | date (ISO 8601 string) | Date of birth (YYYY-MM-DD) |
| birth_place | string | Place of birth as printed |
| nationality | string | Holder nationality as an ISO 3166-1 alpha-3 code |
| card_number | string | Card number as printed on the document |
| card_type | string | Type of card: resident_10_years or long_term_resident_eu |
| valid_from | date (ISO 8601 string) | Start date of the card validity |
| valid_until | date (ISO 8601 string) | End date of the card validity |
| issuing_prefecture | string | Prefecture that issued the card |
| mrz | object | Parsed machine-readable zone with format and lines |
Validation
Extraction results include a validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.
Residence-Permit Renewal Attestation (Attestation de renouvellement)
fr_attestation_renouvellement_titre_sejourPreviewIdentity & KYCThe Attestation de renouvellement is a prefecture-issued document confirming that a residence-permit renewal request is being processed and extending the holder's right to stay in the meantime. The extraction returns the beneficiary identity, the file reference, the requested permit type, the decision and its validity, and the issuing prefecture. It is used as an interim residence-status document during onboarding and KYC review.
Document structure
The renewal attestation contains:
- Beneficiary: Surname, given names, date of birth, nationality
- File reference: The AGDREF number identifying the foreign national's file
- Request: The requested permit type and the decision taken
- Validity: Decision date, attestation validity end date, issuing prefecture
Data structure
Within the document_parts array, the fr_attestation_renouvellement_titre_sejour data object contains:
{
"beneficiary": {
"last_name": "MARTIN",
"first_names": ["Camille", "Alex"],
"birth_date": "1990-05-12",
"nationality": "SEN"
},
"agdref_number": "SPECIMEN0000",
"requested_permit_type": "Carte de séjour pluriannuelle",
"decision": "renewal_in_progress",
"decision_date": "2026-01-15",
"attestation_valid_until": "2026-07-14",
"issuing_prefecture": "Préfecture du Rhône"
}Field reference
| Field | Type | Description |
|---|---|---|
| beneficiary | object | Identity of the renewal beneficiary (see below) |
| beneficiary.last_name | string | Beneficiary surname (nom) |
| beneficiary.first_names | array of strings | Given names (prénoms) in printed order |
| beneficiary.birth_date | date (ISO 8601 string) | Date of birth (YYYY-MM-DD) |
| beneficiary.nationality | string | Beneficiary nationality as an ISO 3166-1 alpha-3 code |
| agdref_number | string | AGDREF number identifying the foreign national's file |
| requested_permit_type | string | Permit type the renewal request applies to |
| decision | string | Decision recorded on the attestation (e.g. renewal in progress) |
| decision_date | date (ISO 8601 string) | Date the decision was recorded |
| attestation_valid_until | date (ISO 8601 string) | Date until which the attestation extends the right to stay |
| issuing_prefecture | string | Prefecture that issued the attestation |
Validation
Extraction results include a validation_status and validation_codes reflecting coherence, completeness and authenticity controls. Anomalies are surfaced as graded alerts for human review.