--- title: "Passport" slug: "ai-application-service-ocr-ocrdocumentocr-passport" updated: 2026-09-17T09:35:51Z published: 2026-09-17T09:35:51Z canonical: "api.ncloud-docs.com/ai-application-service-ocr-ocrdocumentocr-passport" --- > ## 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. # Passport Available in Classic and VPC Recognize and extract key-value input information from Korean passports using a specialized model engine. It also provides MRZ area recognition and extraction for foreign passports. ## Request This section describes the request format. The method and URI are as follows: | Method | URI | Description | | --- | --- | --- | | POST | /id-card | Korean passport (ID card) | | POST | /passport | Foreign passport (global) | ### 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: #### For `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 (timestamp) | | `images` | Array | Required | [images details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#images1) | #### For `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 (timestamp) | | `message.images` | Array | Required | [images details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#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 | Arbitrary 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: #### For `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": "passport_test", "data":"{Base64-encoded image data}" } ] }' ``` #### For `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 'Content-Type: application/json' \ --header 'X-OCR-SECRET: {Secret key issued when registering the app}' \ --form 'message="{\"version\": \"V2\", \"requestId\": \"1234\", \"timestamp\": 0, \"images\": [{\"format\": \"png\", \"name\": \"passport_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 | - | API call UUID | | `timestamp` | Integer | - | API call time (timestamp) | | `images` | Array | - | [images details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#images2) | #### `images` The following describes `images`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `uid` | String | - | Passport image UID - Use for API validity checks. | | `name` | String | - | Passport image name - Use to identify images and check response results. | | `inferResult` | String | - | Passport 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 | - | [Korean passport (ID card) OCR recognition result](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#result) | | `passport.passportResult` | Object | - | [Foreign passport (global) OCR recognition result](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#passportResult) | #### `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 | | `pp` | Object | - | Passport information | | `pp.type` | Array | - | [Passport type details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#type) | | `pp.issueCountry` | Array | - | [Passport issuance country details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#issueCountry) | | `pp.num` | Array | - | [Passport number details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#num) | | `pp.surName` | Array | - | [Last name details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#name) | | `pp.givenName` | Array | - | [First name details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#name) | | `pp.nationality` | Array | - | [Nationality details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#nationality) | | `pp.birthDate` | Array | - | [Date of birth details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#%EC%9D%BC%EC%9E%90%EA%B0%9D%EC%B2%B4%EC%A0%95%EB%B3%B4) | | `pp.sex` | Array | - | [Gender details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#sex) | | `pp.issueDate` | Array | - | [Issuance date details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#%EC%9D%BC%EC%9E%90%EA%B0%9D%EC%B2%B4%EC%A0%95%EB%B3%B4) | | `pp.expireDate` | Array | - | [Expiration date details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#%EC%9D%BC%EC%9E%90%EA%B0%9D%EC%B2%B4%EC%A0%95%EB%B3%B4) | | `pp.authority` | Array | - | [Issuing authority details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#authority) | | `pp.fullNameKor` | Array | - | [Full name details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#authority) | | `pp.mrz1` | Array | - | [Machine readable zone 1 details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#mrz) | | `pp.mrz2` | Array | - | [Machine readable zone 2 details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#mrz) | | `rois` | Array | - | [Object border position information](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#rois) | | `idType` | String | - | ID card type - `Passport` | #### type The following describes `pp.type`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized type text | | `formatted` | Object | - | Recognized type text information | | `formatted.value` | String | - | Recognized type text value | | `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](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#maskingpolys) | #### issueCountry The following describes `pp.issueCountry`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized issuing country text | | `keyText` | String | - | Key value of recognized issuing country text | | `confidenceScore` | Float | - | Confidence of recognized issuing country text - 0-1 - The higher the confidence value, the more accurate the text is. | | `boundingPolys` | Array | - | [boundingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | #### num The following describes `pp.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](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#maskingpolys) | #### name The following describes `pp.surName` and `pp.GivenName`. | 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](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#maskingpolys) | #### nationality The following describes `pp.nationality`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized nationality text | | `formatted` | Object | - | Recognized nationality text information | | `formatted.value` | String | - | Recognized nationality text value | | `keyText` | String | - | Key value of recognized nationality text | | `confidenceScore` | Float | - | Confidence of recognized nationality text - 0-1 - The higher the confidence value, the more accurate the text is. | | `boundingPolys` | Array | - | [boundingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#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 of recognized date (yyyy) | | `formatted.month` | String | - | Month of recognized date (MM) | | `formatted.day` | String | - | Day of recognized date (dd) | | `keyText` | String | - | Key value of recognized issuing 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](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#maskingpolys) | #### sex The following describes `pp.sex`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized gender text | | `formatted` | Object | - | Recognized gender text information | | `formatted.value` | String | - | Recognized gender text value | | `keyText` | String | - | Key value of recognized gender text | | `confidenceScore` | Float | - | Confidence of recognized gender text - 0-1 - The higher the confidence value, the more accurate the text is. | | `boundingPolys` | Array | - | [boundingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#maskingpolys) | #### authority The following describes `pp.authority`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized issuing authority text | | `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](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | #### fullNameKor The following describes `pp.fullNameKor`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized full name text | | `formatted` | Object | - | Recognized full name text information | | `formatted.value` | String | - | Recognized full name text value | | `keyText` | String | - | Key value of recognized full name text | | `confidenceScore` | Float | - | Confidence of recognized full name text - 0-1 - The higher the confidence value, the more accurate the text is. | | `boundingPolys` | Array | - | [boundingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#maskingpolys) | #### mrz The following describes `mrz`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `text` | String | - | Recognized MRZ text | | `formatted` | Object | - | Recognized MRZ text information | | `formatted.value` | String | - | Recognized MRZ text value | | `keyText` | String | - | Key value of the recognized MRZ text | | `confidenceScore` | Float | - | Confidence of recognized MRZ text - 0-1 - The higher the confidence value, the more accurate the text is. | | `boundingPolys` | Array | - | [boundingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#boundingpolys) | | `maskingPolys` | Array | - | [maskingPoly details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#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](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#vertices) | #### `maskingPolys` The following describes `maskingPolys`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `vertices` | Array | - | [vertices details](/docs/en/ai-application-service-ocr-ocrdocumentocr-passport#vertices) | #### `boundingPolyVertices` The following describes `boundingPolyVertices`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `x` | Float | - | X-axis coordinate value | | `y` | Float | - | Y-axis coordinate value | #### `passportResult` The following describes `passportResult`. | Field | Type | Required | Description | | --- | --- | --- | --- | | `documentClassCode` | String | - | Document code | | `issuingStateCode` | String | - | Issuing country | | `firstName` | String | - | Name | | `lastName1` | String | - | First last name | | `lastName2` | String | - | Second last name | | `documentNumber` | String | - | Passport number | | `checkDigitForDocumentNumber` | MrzString | - | Verification digits for document number | | `nationality` | String | - | Nationality | | `dateOfBirth` | String | - | Date of birth | | `age` | Integer | - | Age | | `checkDigitForDateOfBirth` | String | - | Verification digits for date of birth | | `gender` | String | - | Gender | | `dateOfExpiry` | String | - | Expiration date | | `checkDigitForDateOfExpiry` | String | - | Verification digits for expiration date | | `personalNumber` | String | - | Resident registration number | | `checkDigitForPersonalNumber` | String | - | Verification digits for resident registration number | | `finalCheckDigit` | String | - | Final verification digits | | `mrzType` | String | - | Machine Readable Zone (MRZ) type | | `mrzLines` | String | - | Machine Readable Zone (MRZ) text | | `isExpired` | Boolean | - | Expiration status | ### Response status codes For information about the HTTP 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: #### Succeeded The following is a sample response upon a successful call. **Korean passport (ID card)** ``` { "version": "V2", "requestId": "1234", "timestamp": 1725412120101, "images": [ { "uid": "{uid}", "name": "passport_test", "inferResult": "SUCCESS", "message": "SUCCESS", "validationResult": { "result": "NO_REQUESTED" }, "idCard": { "meta": { "estimatedLanguage": "ko" }, "result": { "isConfident": true, "pp": { "type": [ { "text": "PM", "formatted": { "value": "PM" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 187.23215, "y": 428.7616 }, { "x": 206.57947, "y": 428.7616 }, { "x": 206.57947, "y": 439.99554 }, { "x": 187.23215, "y": 439.99554 } ] } ], "maskingPolys": [] } ], "issueCountry": [ { "text": "KOR", "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 234.04018, "y": 428.7616 }, { "x": 260.8768, "y": 428.7616 }, { "x": 260.8768, "y": 439.99554 }, { "x": 234.04018, "y": 439.99554 } ] } ] } ], "num": [ { "text": "M123A****", "formatted": { "value": "M123A****" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 327.65625, "y": 428.7616 }, { "x": 395.68393, "y": 428.7616 }, { "x": 395.68393, "y": 439.99554 }, { "x": 327.65625, "y": 439.99554 } ] } ], "maskingPolys": [ { "vertices": [ { "x": 326.53287, "y": 427.6382 }, { "x": 396.8073, "y": 427.6382 }, { "x": 396.8073, "y": 441.11893 }, { "x": 326.53287, "y": 441.11893 } ] } ] } ], "surName": [ { "text": "HONG", "formatted": { "value": "HONG" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 187.23215, "y": 454.97412 }, { "x": 224.05446, "y": 454.97412 }, { "x": 224.05446, "y": 466.83215 }, { "x": 187.23215, "y": 466.83215 } ] } ], "maskingPolys": [] } ], "givenName": [ { "text": "GIL****", "formatted": { "value": "GIL****" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 187.23215, "y": 481.8107 }, { "x": 241.52946, "y": 481.8107 }, { "x": 241.52946, "y": 493.66876 }, { "x": 187.23215, "y": 493.66876 } ] } ], "maskingPolys": [] } ], "nationality": [ { "text": "REPUBLIC OF KOREA", "formatted": { "value": "REPUBLIC OF KOREA" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 187.74973, "y": 569.2035 }, { "x": 244.59932, "y": 568.4555 }, { "x": 244.73523, "y": 578.78436 }, { "x": 187.88564, "y": 579.53235 } ] } ], "maskingPolys": [] } ], "birthDate": [ { "text": "February 1, 1987", "formatted": { "year": "1987", "month": "02", "day": "01" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 186.60803, "y": 534.8598 }, { "x": 204.70714, "y": 534.8598 }, { "x": 204.70714, "y": 547.96606 }, { "x": 186.60803, "y": 547.96606 } ] } ], "maskingPolys": [] } ], "sex": [ { "text": "F んだ", "formatted": { "value": "F" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 187.23215, "y": 558.57587 }, { "x": 204.08304, "y": 558.57587 }, { "x": 204.08304, "y": 565.4411 }, { "x": 187.23215, "y": 565.4411 } ] } ], "maskingPolys": [] } ], "issueDate": [ { "text": "August 15, 2020", "formatted": { "year": "2020", "month": "08", "day": "15" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 187.23215, "y": 594.7741 }, { "x": 202.83482, "y": 594.7741 }, { "x": 202.83482, "y": 605.3839 }, { "x": 187.23215, "y": 605.3839 } ] } ], "maskingPolys": [] } ], "expireDate": [ { "text": "August 15, 2030", "formatted": { "year": "2030", "month": "08", "day": "15" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 328.28036, "y": 594.15 }, { "x": 343.25894, "y": 594.15 }, { "x": 343.25894, "y": 605.3839 }, { "x": 328.28036, "y": 605.3839 } ] } ], "maskingPolys": [] } ], "authority": [ { "text": "MINISTRY OF FOREIGN AFFAIRS", "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 328.28036, "y": 569.8098 }, { "x": 373.84018, "y": 569.8098 }, { "x": 373.84018, "y": 577.9232 }, { "x": 328.28036, "y": 577.9232 } ] } ] } ], "fullNameKor": [ { "text": "Hong**", "formatted": { "value": "Hong**" }, "keyText": "", "confidenceScore": 0.0, "boundingPolys": [ { "vertices": [ { "x": 186.60803, "y": 506.775 }, { "x": 223.43036, "y": 506.775 }, { "x": 223.43036, "y": 522.3777 }, { "x": 186.60803, "y": 522.3777 } ] } ], "maskingPolys": [] } ], "mrz1": [ { "text": "PMKORHONG<