| Name | Domain |
|---|---|
| OCR Public API Domain | https://ocr.api.nhncloudservice.com |
[URI]
| Method | URI |
|---|---|
| GET | /v2.0/appkeys/{appKey}/public-keys/{serviceName} |
[Request Header]
| Name | Value | Description |
|---|---|---|
| Authorization | {secretKey} | Security key issued from the console |
[Path Variable]
| Name | Value | Description |
|---|---|---|
| appKey | {appKey} | Integrated Appkey or Service Appkey |
| serviceName | {serviceName} | credit-card (when issuing the public key used for calling the credit card API), id-card (when issuing the public key used for calling the ID card API) |
[Request Body]
curl -X GET 'https://ocr.api.nhncloudservice.com/v2.0/appkeys/{appKey}/public-keys/{serviceName}' \
-H 'Authorization: ${secretKey}'
[Response Body]
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"result": {
"key": "String",
"version": "0"
}
}
[Header]
| Name | Type | Description |
|---|---|---|
| isSuccessful | Boolean | API success or not |
| resultCode | Integer | Result code |
| resultMessage | String | Result message (success on success, error content on failure) |
[Field]
| Name | Type | Description |
|---|---|---|
| result | Object | Public key required for encryption |
| result.key | String | Public key (Base64 encoded) |
| result.version | String | version of public key |
[URI]
| Method | URI |
|---|---|
| POST | /v2.0/appkeys/{appKey}/credit-card |
[Request Header]
| Name | Value | Description |
|---|---|---|
| Authorization | {secretKey} | Security key issued from the console |
| X-Key-Version | {x-key-version} | Version of the public key issued |
| Symmetric-Key | {symmetricKey} | Symmetric key encrypted with the issued public key |
[Path Variable]
| Name | Value | Description |
|---|---|---|
| appKey | {appKey} | Integrated Appkey or Service Appkey |
[Field]
| Name | Type | Description | Encryption Description |
|---|---|---|---|
| image | multipart/form-data | Image file | Image encrypted with a symmetric key |
[Request Body]
curl -X POST 'https://ocr.api.nhncloudservice.com/v2.0/appkeys/{appKey}/credit-card' \
-F 'image=@sample.png' \
-H 'Authorization: ${secretKey}' \
-H 'X-Key-Version: ${x-key-version}' \
-H 'Symmetric-Key: ${symmetricKey}'
[Response Body]
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"result": {
"fileType": "png",
"resolution": "low",
"cardNums": [
{
"value": "1111",
"conf": 0.87
},
{
"value": "2222",
"conf": 0.99
},
{
"value": "3333",
"conf": 0.97
},
{
"value": "4444",
"conf": 0.89
}
],
"totalCardNum": "111222233334444",
"cardNumBoxes": [
{
"x1": 62,
"y1": 256,
"x2": 192,
"y2": 256,
"x3": 192,
"y3": 301,
"x4": 62,
"y4": 301
},
...
],
"validThru": {
"value": "04/19",
"conf": 0.53
},
"validThruBox": {
"x1": 316,
"y1": 315,
"x2": 426,
"y2": 315,
"x3": 426,
"y3": 347,
"x4": 316,
"y4": 347
}
}
}
[Header]
| Name | Type | Description |
|---|---|---|
| isSuccessful | Boolean | Analysis API success or not |
| resultCode | Integer | Result code |
| resultMessage | String | Result message (success on success, error content on failure) |
[Field]
| Name | Type | Description | Whether encrypted or not |
|---|---|---|---|
| fileType | String | File extension (.jpg, .png) | |
| resolution | String | normal: the resolution is the recommended resolution (760*480px) or above, low: the resolution is below the recommended resolution | |
| cardNums | List | List of card number recognition results | |
| cardNums[0].value | String | Recognition result | O |
| cardNums[0].conf | Double | Confidence of the recognition result | |
| totalCardNum | List | Full card number recognition result | O |
| cardNumBoxes | List | List of coordinates of the card number recognition area (bounding box) | |
| cardNumBoxes[0] | Object | Coordinates of recognized area { x1, y1, x2, y2, x3, y3, x4, y4 } | |
| validThru.value | String | Expiration date recognition content | O |
| validThru.conf | Double | Confidence of expiration date recognition result | |
| validThruBox | Object | Coordinates of the expiration date recognition area { x1, y1, x2, y2, x3, y3, x4, y4 } |
Encrypted items (cardNums[0].value, totalCardNum, etc.) are encrypted with the AES-256/CBC/PKCS7Padding method (using symmetric key).
boxes[0]

[URI]
| Method | URI |
|---|---|
| POST | /v2.0/appkeys/{appKey}/id-card |
[Request Header]
| Name | Value | Description |
|---|---|---|
| Authorization | {secretKey} | Security key issued from the console |
| X-Key-Version | {x-key-version} | Version of the public key issued |
| Symmetric-Key | {symmetricKey} | Symmetric key encrypted with the issued public key |
[Path Variable]
| Name | Value | Description |
|---|---|---|
| appKey | {appKey} | Integrated Appkey or Service Appkey |
[Field]
| Name | Type | Description | Encryption Description |
|---|---|---|---|
| image | multipart/form-data | Image file | Image encrypted with a symmetric key |
[Request Body]
curl -X POST 'https://ocr.api.nhncloudservice.com/v2.0/appkeys/{appKey}/id-card' \
-F 'image=@sample.png' \
-H 'Authorization: ${secretKey}' \
-H 'X-Key-Version: ${x-key-version}' \
-H 'Symmetric-Key: ${symmetricKey}'
[Response Header]
| Name | Description |
|---|---|
| Request-Key | Request-Key to be used when calling the Verify Authenticity API |
[Response Body]
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"result": {
"fileType": "png",
"resolution": "low",
"idType": "resident",
"keyValues": [
{
"key": "name",
"value": "String",
"conf": 0.67,
"bbox": {
"x1": 191,
"y1": 75,
"x2": 240,
"y2": 75,
"x3": 240,
"y3": 95,
"x4": 191,
"y4": 95
}
},
{
"key": "residentNumber",
"value": "String",
"conf": 0.91,
"bbox": {
"x1": 190,
"y1": 43,
"x2": 382,
"y2": 43,
"x3": 382,
"y3": 64,
"x4": 190,
"y4": 64
}
},
{
"key": "issueDate",
"value": "String",
"conf": 0.86,
"bbox": {
"x1": 191,
"y1": 75,
"x2": 240,
"y2": 75,
"x3": 240,
"y3": 95,
"x4": 191,
"y4": 95
},
},
{
"key": "issuer",
"value": "String",
"conf": 0.8,
"bbox": {
"x1": 19,
"y1": 10,
"x2": 148,
"y2": 10,
"x3": 148,
"y3": 52,
"x4": 19,
"y4": 52
}
}
],
"boxes": [
{
"x1": 280,
"y1": 271,
"x2": 354,
"y2": 271,
"x3": 354,
"y3": 305,
"x4": 280,
"y4": 305
},
...
]
}
}
[Header]
| Name | Type | Description |
|---|---|---|
| isSuccessful | Boolean | Analysis API success or not |
| resultCode | Integer | Result code |
| resultMessage | String | Result message (success on success, error content on failure) |
[Field]
| Name | Type | Description | Whether encrypted or not |
|---|---|---|---|
| fileType | String | File extension (.jpg, .png) | |
| resolution | String | normal: the resolution is the recommended resolution (760*480px) or above, low: the resolution is below the recommended resolution | |
| idType | String | resident(resident registration certificate), driver(driver license), passport (passport) | |
| keyValues | List | ||
| keyValues[0].key | String | ||
| keyValues[0].value | String | O | |
| keyValues[0].bbox | Object | Coordinates of recognized area { x1, y1, x2, y2, x3, y3, x4, y4 } | |
| keyValues[0].conf | Double | Confidence of the recognition result | |
| boxes | List | List of bounding box coordinates | |
| boxes[0] | Object | Coordinates of recognized area { x1, y1, x2, y2, x3, y3, x4, y4 } |
| key | value type | description |
|---|---|---|
| name | string | Recognized name |
| residentNumber | string | Recognized resident registration number |
| issueDate | string | Recognized issued date |
| issuer | string | Recognized issuer |
| key | value type | description |
|---|---|---|
| driverLicenseNumber | string | Recognized driver license number |
| licenseType | string | Recognized driver license type (Class 1 Normal, etc.) When the values are 2 or more, separate them with “/” |
| name | string | Recognized name |
| residentNumber | string | Recognized resident registration number |
| condition | string | Recognized driver license condition (If the field does not exist according to the driver's license, the value of the field is none) |
| serialNum | string | Recognized serial number |
| issueDate | string | Recognized issued date |
| issuer | string | Recognized issuer |
| key | value type | description |
|---|---|---|
| passportType | string | Recognized passport type |
| countryCode | string | Recognized country code |
| passportNo | string | Recognized passport number |
| surName | string | Recognized surname |
| givenName | string | Recognized name |
| nationality | string | Recognized nationality |
| dateOfBirth | string | Recognized birthdate |
| dateOfBirthYMD | string | Recognized birthdate (YYYYMMDD 8 digits) |
| sex | string | Recognized gender |
| dateOfIssue | string | Recognized issue date |
| dateOfIssueYMD | string | Recognized issue date (YYYYMMDD 8 digits) |
| dateOfExpiry | string | Recognized expiration date |
| dateOfExpiryYMD | string | Recognized expiration date (YYYYMMDD 8 digits) |
| koreanName | string | Recognized Korean name |
| personalNo | string | Recognized resident registration number |
| MRZ1 | string | Machine readable zone 1 |
| MRZ2 | string | Machine readable zone 2 |

[URI]
| Method | URI |
|---|---|
| POST | /v2.0/appkeys/{appKey}/id-card/authenticity |
[Request Header]
| Name | Value | Description |
|---|---|---|
| Authorization | {secretKey} | Security key issued from the console |
| X-Key-Version | {x-key-version} | Version of the public key issued |
| Symmetric-Key | {symmetricKey} | Symmetric key encrypted with the issued public key |
| Request-Key | {Request-Key} | Request-Key issued after ID card analysis |
[Path Variable]
| Name | Value | Description |
|---|---|---|
| appKey | {appKey} | Integrated Appkey or Service Appkey |
[Field]
| Name | Type | Description | idType | Whether encrypted or not | Required |
|---|---|---|---|---|---|
| idType | String | resident(resident registration certificate), driver(driver license), passport (passport) | X | O | |
| name | String | Name | O | O | |
| residentNumber | String | Resident registration number - For resident (resident registration certificate), 13 digits of resident registration number - For a driver (driver's license), 7 digits that comprise of the first 6 digits and the first 1 digit of resident registration number |
resident, driver | O | O |
| issueDate | String | Issued date (YYYYMMDD) | resident, passport | O | O |
| driverLicenseNumber | String | 12 digits of driver license number | driver | O | O |
| serialNum | String | 5 and 6 digits of serial number | driver | O | X |
| passportNumber | String | Passport number (9 digits in uppercase letters and numbers) | passport | O | O |
| birthDate | String | Birthdate (YYYYMMDD) | passport | O | O |
| expirationDate | String | Expiration date (YYYYMMDD) | passport | X | O |
[Request Body]
curl -X POST 'https://ocr.api.nhncloudservice.com/v2.0/appkeys/{appKey}/id-card/authenticity' \
-H 'Authorization: ${secretKey}' \
-H 'X-Key-Version: ${x-key-version}' \
-H 'Symmetric-Key: ${symmetricKey}' \
-H 'Request-Key: ${Request-Key}' \
-H 'Content-Type: application/json' \
--data-raw '{
"idType": "driver",
"name": "J/MTycDJ...",
"residentNumber": "P12ztmj...",
"driverLicenseNumber": "OHjVJrUMh...",
"serialNum": "7tnTOKuKGJ..."
}'
[Response Body]
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"result": {
"isAuthenticity": false
}
}
[Header]
| Name | Type | Description |
|---|---|---|
| isSuccessful | Boolean | Whether the Verify Authenticity API succeeds or not |
| resultCode | Integer | Result code |
| resultMessage | String | Result message (success on success, error content on failure) |
[Field]
| Name | Type | Description |
|---|---|---|
| isAuthenticity | Boolean | Whether it is authentic or not |
[URI]
| Method | URI |
|---|---|
| POST | /v2.0/appkeys/{appKey}/id-card/stand-alone |
[Request Header]
| Name | Value | Description |
|---|---|---|
| Authorization | {secretKey} | Security key issued from the console |
| X-Key-Version | {x-key-version} | Version of the public key issued |
| Symmetric-Key | {symmetricKey} | Symmetric key encrypted with the issued public key |
[Path Variable]
| Name | Value | Description |
|---|---|---|
| appKey | {appKey} | Integrated Appkey or Service Appkey |
[Field]
| Name | Type | Description | Encryption Description |
|---|---|---|---|
| image | multipart/form-data | Image file | Image encrypted with a symmetric key |
[Request Body]
curl -X POST 'https://ocr.api.nhncloudservice.com/v2.0/appkeys/{appKey}/id-card/stand-alone' \
-F 'image=@sample.png' \
-H 'Authorization: ${secretKey}' \
-H 'X-Key-Version: ${x-key-version}' \
-H 'Symmetric-Key: ${symmetricKey}'
[Response Body]
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"result": {
"fileType": "png",
"resolution": "low",
"idType": "resident",
"keyValues": [
{
"key": "name",
"value": "String",
"conf": 0.67,
"bbox": {
"x1": 191,
"y1": 75,
"x2": 240,
"y2": 75,
"x3": 240,
"y3": 95,
"x4": 191,
"y4": 95
}
},
{
"key": "residentNumber",
"value": "String",
"conf": 0.91,
"bbox": {
"x1": 190,
"y1": 43,
"x2": 382,
"y2": 43,
"x3": 382,
"y3": 64,
"x4": 190,
"y4": 64
}
},
{
"key": "issueDate",
"value": "String",
"conf": 0.86,
"bbox": {
"x1": 191,
"y1": 75,
"x2": 240,
"y2": 75,
"x3": 240,
"y3": 95,
"x4": 191,
"y4": 95
},
},
{
"key": "issuer",
"value": "String",
"conf": 0.8,
"bbox": {
"x1": 19,
"y1": 10,
"x2": 148,
"y2": 10,
"x3": 148,
"y3": 52,
"x4": 19,
"y4": 52
}
}
],
"boxes": [
{
"x1": 280,
"y1": 271,
"x2": 354,
"y2": 271,
"x3": 354,
"y3": 305,
"x4": 280,
"y4": 305
},
...
]
}
}
[Header]
| Name | Type | Description |
|---|---|---|
| isSuccessful | Boolean | Analysis API success or not |
| resultCode | Integer | Result code |
| resultMessage | String | Result message (success on success, error content on failure) |
[Field]
| Name | Type | Description | Whether encrypted or not |
|---|---|---|---|
| fileType | String | File extension (.jpg, .png) | |
| resolution | String | normal: the resolution is the recommended resolution (760*480px) or above, low: the resolution is below the recommended resolution | |
| idType | String | resident(resident registration certificate), driver(driver license), passport (passport) | |
| keyValues | List | ||
| keyValues[0].key | String | ||
| keyValues[0].value | String | O | |
| keyValues[0].bbox | Object | Coordinates of recognized area { x1, y1, x2, y2, x3, y3, x4, y4 } | |
| keyValues[0].conf | Double | Confidence of the recognition result | |
| boxes | List | List of bounding box coordinates | |
| boxes[0] | Object | Coordinates of recognized area { x1, y1, x2, y2, x3, y3, x4, y4 } |
| key | value type | description |
|---|---|---|
| name | string | Recognized name |
| residentNumber | string | Recognized resident registration number |
| issueDate | string | Recognized issued date |
| issuer | string | Recognized issuer |
| key | value type | description |
|---|---|---|
| driverLicenseNumber | string | Recognized driver license number |
| licenseType | string | Recognized driver license type (Class 1 Normal, etc.) When the values are 2 or more, separate them with “/” |
| name | string | Recognized name |
| residentNumber | string | Recognized resident registration number |
| condition | string | Recognized driver license condition (If the field does not exist according to the driver's license, the value of the field is none) |
| serialNum | string | Recognized serial number |
| issueDate | string | Recognized issued date |
| issuer | string | Recognized issuer |
| key | value type | description |
|---|---|---|
| passportType | string | Recognized passport type |
| countryCode | string | Recognized country code |
| passportNo | string | Recognized passport number |
| surName | string | Recognized surname |
| givenName | string | Recognized name |
| nationality | string | Recognized nationality |
| dateOfBirth | string | Recognized birthdate |
| dateOfBirthYMD | string | Recognized birthdate (YYYYMMDD 8 digits) |
| sex | string | Recognized gender |
| dateOfIssue | string | Recognized issue date |
| dateOfIssueYMD | string | Recognized issue date (YYYYMMDD 8 digits) |
| dateOfExpiry | string | Recognized expiration date |
| dateOfExpiryYMD | string | Recognized expiration date (YYYYMMDD 8 digits) |
| koreanName | string | Recognized Korean name |
| personalNo | string | Recognized resident registration number |
| MRZ1 | string | Machine readable zone 1 |
| MRZ2 | string | Machine readable zone 2 |
