--- title: "Driver's license" slug: "ai-application-service-ocr-ocrdocumentocr-driverlicense" updated: 2026-09-17T09:35:51Z published: 2026-09-17T09:35:51Z canonical: "api.ncloud-docs.com/ai-application-service-ocr-ocrdocumentocr-driverlicense" --- > ## Documentation Index > Fetch the complete documentation index at: https://api.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Driver's license Available in Classic and VPC Recognize and extract key-value input information from driver's licenses using a specialized model engine. ## Request This section describes the request format. The method and URI are as follows: | Method | URI | | --- | --- | | POST | /id-card | ### Request headers For information about the headers common to all CLOVA OCR APIs, see [CLOVA OCR request headers](/docs/en/ai-application-service-ocr#%EC%9A%94%EC%B2%AD%ED%97%A4%EB%8D%94). ### Request body You can include the following data in the body of your request: #### If `Content-Type: application/json` You can include the following data in the body of your request if the request header's `Content-Type` is `application/json`: | Field | Type | Required | Description | | --- | --- | --- | --- | | `version` | String | - | Version information - Only use `V2` | | `requestId` | String | Required | Random API call UUID | | `timestamp` | Integer | Required | Random API call time (millisecond) - Unix timestamp format | | `images` | Array | Required | images details: [images](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#images1) | #### If `Content-Type: multipart/form-data` You can include the following data in the body of your request if the request header's `Content-Type` is `multipart/form-data`: | Field | Type | Required | Description | | --- | --- | --- | --- | | `message` | Object | Required | Request data information | | `message.version` | String | Required | Version information - Only use `V2` | | `message.requestId` | String | Required | Random API call UUID | | `message.timestamp` | Integer | Required | Random API call time (millisecond) - Unix timestamp format | | `message.images` | Array | Required | images details: [images](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#images1) | | `file` | File | Required | OCR recognition image file | #### `images` The following describes `images`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `format` | String | Required | Image format - `jpg` \| `jpeg` \| `png` \| `pdf` \| `tif` \| `tiff` - Image: `jpg`, `jpeg`, `png` - Single page: `pdf`, `tif`, `tiff` - Select and enter one of the image formats | | `name` | String | Required | Random image name - Use to identify images and check response results | | `data` | String | Required | Base64-encoded image data - Can be entered if `Content-Type: application/json` | ### Request example The request example is as follows: #### If `Content-Type: application/json` The request example if the request header's `Content-Type` is `application/json` is as follows: ``` curl --location --request POST 'https://cbgrx5natw.apigw.ntruss.com/custom/v1/{DomainId}/{InvokeKey}/document/id-card' \ --header 'Content-Type: application/json' \ --header 'X-OCR-SECRET: {Secret key issued when registering the app}' \ --data '{ "version": "V2", "requestId": "string", "timestamp": 0, "images": [ { "format": "png", "name": "driverlicense_test", "data":"{Base64-encoded image data}" } ] }' ``` #### If `Content-Type: multipart/form-data` The request example if the request header's `Content-Type` is `multipart/form-data` is as follows: ``` curl --location --request POST 'https://cbgrx5natw.apigw.ntruss.com/custom/v1/{DomainId}/{InvokeKey}/document/id-card' \ --header 'X-OCR-SECRET: {Secret key issued when registering the app}' \ --header 'Content-Type: multipart/form-data' \ --form 'message="{\"version\": \"V2\", \"requestId\": \"1234\", \"timestamp\": 0, \"images\": [{\"format\": \"png\", \"name\": \"driverlicense_test\"}]}"' \ --form 'file=@"{file}"' ``` ## Response This section describes the response format. ### Response body The response body includes the following data: | Field | Type | Required | Description | | --- | --- | --- | --- | | `version` | String | - | Version information - Only use `V2` | | `requestId` | String | - | Random API call UUID | | `timestamp` | Integer | - | API call time (millisecond) - Unix timestamp format | | `images` | Array | - | images details: [images](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#images2) | #### `images` The following describes `images`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `uid` | String | - | Driver's license image UID - Use for API validity checks | | `name` | String | - | Driver's license image name - Use to identify images and check response results | | `inferResult` | String | - | Driver's license image recognition result - `SUCCESS` \| `FAILURE` \| `ERROR` - `SUCCESS`: recognition successful - `FAILURE`: recognition failure - `ERROR`: recognition processing exception | | `message` | String | - | Result message | | `validationResult` | Object | - | Validity check result information | | `validationResult.result` | String | - | Validity check result code - `NO_REQUESTED` \| `UNCHECKED` \| `ERROR` \| `VALID` \| `INVALID` - `NO_REQUESTED`: no validation action requested (validity check failed) - `UNCHECKED`: unable to verify validation - `ERROR`: error on validation (validity check failed) - `VALID`: validation result valid (validity check succeeded) - `INVALID`: failed to pass validation | | `validationResult.message` | String | - | Validity check result details message - This value is not always returned | | `convertedImageInfo` | Object | - | Converted image information - If `format` is `pdf` or `tiff` - Coordinate values are set relative to the called image file | | `convertedImageInfo.width` | Integer | - | Converted image width | | `convertedImageInfo.height` | Integer | - | Converted image height | | `convertedImageInfo.pageIndex` | Integer | - | Converted image page index | | `idCard` | Object | - | ID card details | | `idCard.meta` | Object | - | Meta information | | `idCard.meta.estimatedLanguage` | String | - | OCR estimated language - `ko` \| `en` \| `ja` - `ko`:Korean - `en`: English - `ja`: Japanese | | `idCard.result` | Object | - | ID card OCR recognition result: [result](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#result) | #### `result` The following describes `result`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `isConfident` | Boolean | - | Whether it has details for each type - `true` \| `false` - `true`: has - `false`: doesn't have | | `dl` | Object | - | Driver's license information | | `dl.type` | Array | - | Driver's license type details: [type](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#type) | | `dl.num` | Array | - | Driver's license number details: [num](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#num) | | `dl.name` | Array | - | Name details: [name](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#name) | | `dl.personalNum` | Array | - | Resident registration number details: [personalNum](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#personalNum) | | `dl.address` | Array | - | Address details: [address](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#address) | | `dl.renewStartDate` | Array | - | Renewal period start date details: [Date object information](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#%EC%9D%BC%EC%9E%90%EA%B0%9D%EC%B2%B4%EC%A0%95%EB%B3%B4) | | `dl.renewEndDate` | Array | - | Renewal period end date details: [Date object information](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#%EC%9D%BC%EC%9E%90%EA%B0%9D%EC%B2%B4%EC%A0%95%EB%B3%B4) | | `dl.condition` | Array | - | Driver's license condition details: [condition](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#condition) | | `dl.code` | Array | - | Driver's license code details: [code](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#code) | | `dl.organDonation` | Array | - | Organ and tissue donation registration details: [organDonation](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#organDonation) | | `dl.issueDate` | Array | - | Issuance date details: [Date object information](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#%EC%9D%BC%EC%9E%90%EA%B0%9D%EC%B2%B4%EC%A0%95%EB%B3%B4) | | `dl.authority` | Array | - | Issuing authority details: [authority](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#authority) | | `rois` | Array | - | Object border position information: [rois](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#rois) | | `idType` | String | - | ID card type - `Driver's License` | #### type The following describes `type`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized type text | | `keyText` | String | - | Key value of recognized type text | | `confidenceScore` | Float | - | Confidence of recognized type text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | #### num The following describes `num`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized number text | | `formatted` | Object | - | Recognized number text information | | `formatted.value` | String | - | Recognized number text value | | `keyText` | String | - | Key value of recognized number text | | `confidenceScore` | Float | - | Confidence of recognized number text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### name The following describes `name`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized name text | | `formatted` | Object | - | Recognized name text information | | `formatted.value` | String | - | Recognized name text value | | `keyText` | String | - | Key value of recognized name text | | `confidenceScore` | Float | - | Confidence of recognized name text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### personalNum The following describes `personalNum`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized resident registration number text | | `formatted` | Object | - | Recognized resident registration number text information | | `formatted.value` | String | - | Recognized resident registration number text value | | `keyText` | String | - | Key value of recognized resident registration number text | | `confidenceScore` | Float | - | Confidence of recognized resident registration number text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### address The following describes `address`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized address text | | `formatted` | Object | - | Recognized address text information | | `formatted.value` | String | - | Recognized address text value | | `keyText` | String | - | Key value of recognized address text | | `confidenceScore` | Float | - | Confidence of recognized address text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### Date object information The following describes the date object. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized date text | | `formatted` | Object | - | Recognized date text information | | `formatted.year` | String | - | Year (yyyy) of recognized date | | `formatted.month` | String | - | Month (MM) of recognized date | | `formatted.day` | String | - | Day (dd) of recognized date | | `keyText` | String | - | Key value of recognized date text | | `confidenceScore` | Float | - | Confidence of recognized date text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### condition The following describes `condition`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized condition text | | `keyText` | String | - | Key value of recognized condition text | | `confidenceScore` | Float | - | Confidence of recognized condition text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### code The following describes `code`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized code text | | `formatted` | Object | - | Recognized code text information | | `formatted.value` | String | - | Recognized code text value | | `keyText` | String | - | Key value of recognized code text | | `confidenceScore` | Float | - | Confidence of recognized code text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### organDonation The following describes `organDonation`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized organ and tissue donation text | | `keyText` | String | - | Key value of recognized organ and tissue donation text | | `confidenceScore` | Float | - | Confidence of recognized organ and tissue donation text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### authority The following describes `authority`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized issuing authority text | | `formatted` | Object | - | Recognized issuing authority text information | | `formatted.value` | String | - | Recognized issuing authority text value | | `keyText` | String | - | Key value of recognized issuing authority text | | `confidenceScore` | Float | - | Confidence of recognized issuing authority text - 0 - 1 - The higher the confidence value, the more accurate the text is | | `boundingPolys` | Array | - | boundingPoly details: [boundingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#boundingpolys) | | `maskingPolys` | Array | - | maskingPoly details: [maskingPolys](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#maskingpolys) | #### rois The following describes `rois`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `x` | Float | - | Object border position X-axis coordinate value | | `y` | Float | - | Object border position Y-axis coordinate value | #### `boundingPolys` The following describes `boundingPolys`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `vertices` | Array | - | vertices details: [vertices](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#vertices) | #### `maskingPolys` The following describes `maskingPolys`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `vertices` | Array | - | vertices details: [vertices](/docs/en/ai-application-service-ocr-ocrdocumentocr-driverlicense#vertices) | #### `vertices` The following describes `vertices`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `x` | Float | - | X-axis coordinate value | | `y` | Float | - | Y-axis coordinate value | ### Response status codes For response status codes common to all CLOVA OCR APIs, see [Common CLOVA OCR response status codes](/docs/en/ai-application-service-ocr-ocrdocumentocr#%EC%9D%91%EB%8B%B5%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C). ### Response example The response example is as follows: #### Success The following is a sample response upon a successful call. ``` { "version": "V2", "requestId": "1234", "timestamp": 1725409664957, "images": [ { "uid": "{uid}", "name": "driverlicense_test", "inferResult": "SUCCESS", "message": "SUCCESS", "validationResult": { "result": "NO_REQUESTED" }, "idCard": { "meta": { "estimatedLanguage": "ko" }, "result": { "isConfident": true, "dl": { "type": [ { "text": "Class 1 Large Class 1 Ordinary Class 1 Small Special (Large tow, Small tow, Rescue) Class 2 Ordinary Class 2 Small Motorcycle", "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 6.875, "y": 20.625 }, { "x": 77.5, "y": 20.625 }, { "x": 77.5, "y": 42.5 }, { "x": 6.875, "y": 42.5 } ] } ] } ], "num": [ { "text": "**-**-******-**", "formatted": { "value": "**-**-******-**" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 270.66333, "y": 81.96319 }, { "x": 615.7258, "y": 83.148964 }, { "x": 615.59015, "y": 122.63947 }, { "x": 270.52765, "y": 121.4537 } ] } ], "maskingPolys": [ { "vertices": [ { "x": 404.75287, "y": 78.474884 }, { "x": 619.68854, "y": 79.213486 }, { "x": 619.5257, "y": 126.60209 }, { "x": 404.59003, "y": 125.86349 } ] } ] } ], "name": [ { "text": "Hong**", "formatted": { "value": "Hong**" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 268.125, "y": 130.0 }, { "x": 358.75, "y": 130.0 }, { "x": 358.75, "y": 164.375 }, { "x": 268.125, "y": 164.375 } ] } ], "maskingPolys": [] } ], "personalNum": [ { "text": "******-*******", "formatted": { "value": "******-*******" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 264.71436, "y": 161.93407 }, { "x": 496.74896, "y": 159.34149 }, { "x": 497.16132, "y": 196.25029 }, { "x": 265.1267, "y": 198.84286 } ] } ], "maskingPolys": [ { "vertices": [ { "x": 376.99954, "y": 156.98816 }, { "x": 500.39862, "y": 155.60939 }, { "x": 500.89346, "y": 199.89995 }, { "x": 377.49442, "y": 201.27872 } ] } ] } ], "address": [ { "text": "Seoul***", "formatted": { "value": "Seoul***" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 263.125, "y": 232.5 }, { "x": 301.25, "y": 232.5 }, { "x": 301.25, "y": 258.75 }, { "x": 263.125, "y": 258.75 } ] } ], "maskingPolys": [] } ], "renewStartDate": [ { "text": "2029.01.01", "formatted": { "year": "2029", "month": "01", "day": "01" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 402.39316, "y": 300.80316 }, { "x": 531.2038, "y": 300.008 }, { "x": 531.3579, "y": 324.9801 }, { "x": 402.54727, "y": 325.7752 } ] } ], "maskingPolys": [] } ], "renewEndDate": [ { "text": "2029 12.31", "formatted": { "year": "2029", "month": "12", "day": "31" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 425.987, "y": 332.6018 }, { "x": 481.51587, "y": 329.9576 }, { "x": 482.8507, "y": 357.98932 }, { "x": 427.32184, "y": 360.6335 } ] } ], "maskingPolys": [] } ], "condition": [ { "text": "Geon 8", "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 341.875, "y": 361.25 }, { "x": 367.5, "y": 361.25 }, { "x": 367.5, "y": 388.75 }, { "x": 341.875, "y": 388.75 } ] } ], "maskingPolys": [] } ], "code": [ { "text": "H1***", "formatted": { "value": "H1***" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 582.5, "y": 351.87497 }, { "x": 690.625, "y": 351.87497 }, { "x": 690.625, "y": 379.99997 }, { "x": 582.5, "y": 379.99997 } ] } ], "maskingPolys": [] } ], "organDonation": [ { "text": "Organ and tissue donation", "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 59.375, "y": 454.375 }, { "x": 105.625, "y": 454.375 }, { "x": 105.625, "y": 479.375 }, { "x": 59.375, "y": 479.375 } ] } ] } ], "issueDate": [ { "text": "2019.09.10", "formatted": { "year": "2019", "month": "09", "day": "10" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 249.375, "y": 443.75 }, { "x": 368.125, "y": 443.75 }, { "x": 368.125, "y": 475.0 }, { "x": 249.375, "y": 475.0 } ] } ], "maskingPolys": [ { "vertices": [ { "x": 246.28294, "y": 440.82266 }, { "x": 411.842, "y": 440.82266 }, { "x": 411.842, "y": 477.9273 }, { "x": 246.28294, "y": 477.9273 } ] } ] } ], "authority": [ { "text": "Seoul Metropolitan Police Agency", "formatted": { "value": "Seoul Metropolitan Police Commissioner" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 402.79678, "y": 436.09882 }, { "x": 651.7483, "y": 433.49652 }, { "x": 652.1772, "y": 474.53296 }, { "x": 403.2257, "y": 477.13528 } ] } ], "maskingPolys": [] } ] }, "rois": [ { "vertices": [ { "x": -4.7505364, "y": -5.066147 }, { "x": 712.13684, "y": -2.8448386 }, { "x": 714.93665, "y": 480.58566 }, { "x": -2.094209, "y": 492.42014 } ] } ], "idtype": "Driver's License" } } } ] } ``` #### Failure The following is a sample response upon a failed call. ``` { "version": "V2", "requestId": "1234", "timestamp": 1725235840459, "images": [ { "uid": "{uid}", "name": "idcard_sample", "inferResult": "ERROR", "message": "Read page:0 error.", "validationResult": { "result": "NO_REQUESTED" } } ] } ```