- 印刷する
- PDF
レシート
- 印刷する
- PDF
Classic/VPC環境で利用できます。
特化モデルエンジンを使用してレシートの入力情報(key-value)を認識し、抽出します。
リクエスト
リクエスト形式を説明します。リクエスト形式は次の通りです。
メソッド | URI |
---|---|
POST | /receipt |
リクエストヘッダ
CLOVA OCR APIで共通して使用されるヘッダの詳細は、CLOVA OCRのリクエストヘッダをご参照ください。
リクエストボディ
リクエストボディの説明は次の通りです。
Content-Type: application/json
の場合
リクエストヘッダのContent-Type
がapplication/json
の場合のリクエストボディの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
version | String | - | バージョン情報
|
requestId | String | Required | 任意の API呼び出しの UUID |
timestamp | Integer | Required | 任意の APIの呼び出し時刻(Timestamp) |
images | Array | Required | imagesの詳細情報 |
Content-Type: multipart/form-data
の場合
リクエストヘッダのContent-Type
がmultipart/form-data
の場合のリクエストボディの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
message | Object | Required | リクエストデータ情報 |
message.version | String | Required | バージョン情報
|
message.requestId | String | Required | 任意の API呼び出しの UUID |
message.timestamp | Integer | Required | 任意の APIの呼び出し時刻(Timestamp) |
message.images | Array | Required | imagesの詳細情報 |
file | File | Required | OCR認識画像ファイル |
images
images
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
format | String | Required | 画像の形式
|
name | String | Required | 任意の画像名
|
data | String | Required | Base64でエンコードされた画像データ
|
リクエスト例
リクエストのサンプルコードは次の通りです。
Content-Type: application/json
の場合
リクエストヘッダのContent-Type
がapplication/json
の場合のリクエストのサンプルコードは次の通りです。
curl --location --request POST ''https://cbgrx5natw.apigw.ntruss.com/custom/v1/{DomainId}/{InvokeKey}/document/receipt' \
--header 'Content-Type: application/json' \
--header 'X-OCR-SECRET: {アプリの登録時に発行された Secret Key}' \
--data '{
"version": "V2",
"requestId": "4567",
"timestamp": "0",
"images": [
{
"format": "png",
"data": "{Base64でエンコードされた画像データ}",
"name": "receipt_test2"
}]
}'
Content-Type: multipart/form-data
の場合
リクエストヘッダのContent-Type
がmultipart/form-data
の場合のリクエストのサンプルコードは次の通りです。
curl --location --request POST ''https://cbgrx5natw.apigw.ntruss.com/custom/v1/{DomainId}/{InvokeKey}/document/receipt' \
--header 'X-OCR-SECRET: {アプリの登録時に発行された Secret Key}' \
--header 'Content-Type: multipart/form-data' \
--form 'message="{\"version\": \"V2\", \"requestId\": \"1234\", \"timestamp\": 1724832750462, \"images\": [{\"format\": \"jpg\", \"name\": \"receipt_test\"}]}"' \
--form 'file={file}"'
レスポンス
レスポンス形式を説明します。
レスポンスボディ
レスポンスボディの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
version | String | - | バージョン情報
|
requestId | String | - | API呼び出し UUID |
timestamp | Integer | - | APIの呼び出し時刻(Timestamp) |
images | Array | - | imagesの詳細情報 |
images
images
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
uid | String | - | レシート画像の UID
|
name | String | - | レシートの画像名
|
inferResult | String | - | レシートの画像認識結果
|
message | String | - | 結果メッセージ |
validationResult | Object | - | 有効性検査の結果情報 |
validationResult.result | String | - | 有効性検査の結果コード
|
validationResult.message | String | - | 有効性検査結果の詳細メッセージ
|
convertedImageInfo | Object | - | 変換後の画像情報
|
convertedImageInfo.width | Integer | - | 変換後画像の横長 |
convertedImageInfo.height | Integer | - | 変換後画像の縦長 |
convertedImageInfo.pageIndex | Integer | - | 変換後画像ページインデックス |
receipt | Object | - | レシートの詳細情報 |
receipt.meta | Object | - | メタ情報 |
receipt.meta.estimatedLanguage | String | - | OCR推定言語
|
receipt.result | Object | - | レシートの OCR認識結果 |
result
receipt.result
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
storeInfo | Object | - | 店舗情報 |
storeInfo.name | Object | - | 店舗名の詳細情報
|
storeInfo.subName | Object | - | 支店名の詳細情報
|
storeInfo.bizNum | Object | - | 店舗の事業者登録番号の詳細情報
|
storeInfo.movieName | Object | - | 映画チケットの詳細情報
|
storeInfo.addresses | Array | - | 店舗住所の詳細情報 |
storeInfo.tel | Array | - | 店舗電話番号の詳細情報 |
paymentInfo | Object | - | 決済情報 |
paymentInfo.date | Object | - | 決済日の詳細情報 |
paymentInfo.time | Object | - | 決済時間の詳細情報 |
paymentInfo.cardInfo | Object | - | 決済カード情報 |
paymentInfo.cardInfo.company | Object | - | カード会社の詳細情報
|
paymentInfo.cardInfo.number | Object | - | カード番号の詳細情報
|
paymentInfo.confirmNum | Object | - | 承認番号の詳細情報
|
subResults | Array | - | 商品グループ情報 |
totalPrice | Object | - | 総額情報 |
totalPrice.price | Object | - | 総額の詳細情報
|
subTotal | Array | - | 合計の詳細情報 |
addresses
receipt.result.storeInfo.addresses
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.value | String | - | 認識結果のテキストの値 |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
tel
receipt.result.storeInfo.tel
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.value | String | - | 認識結果のテキストの値 |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
subResults
receipt.result.subResults
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
items | Array | - | 認識結果の商品の詳細情報 |
items
receipt.result.subResults.items
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
name | Object | - | 項目名の詳細情報
|
code | Object | - | 項目コードの詳細情報
|
count | Object | - | 項目数量の詳細情報
|
price | Object | - | 項目価格情報 |
price.price | Object | - | 項目価格の詳細情報
|
price.unitPrice | Object | - | 項目単価の詳細情報 |
subTotal
receipt.result.subTotal
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
taxPrice | Array | - | 付加価値税の詳細情報 |
discountPrice | Array | - | 割引金額の詳細情報 |
taxPrice
receipt.result.subTotal.taxPrice
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.value | String | - | 認識結果のテキストの値 |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
discountPrice
receipt.result.subTotal.discountPrice
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.value | String | - | 認識結果のテキストの値 |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
共通オブジェクト情報
共通オブジェクトの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.value | String | - | 認識結果のテキストの値 |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
Baseオブジェクト情報
Baseオブジェクト情報
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
日付オブジェクト情報
日付オブジェクトの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.year | String | - | 認識結果の日付の年度(yyyy) |
formatted.month | String | - | 認識結果の日付の月(MM) |
formatted.day | String | - | 認識結果の日付の日(dd) |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
時間オブジェクト情報
時間オブジェクトの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.hour | String | - | 認識結果の時間の時(HH) |
formatted.minute | String | - | 認識結果の時間の分(MM) |
formatted.second | String | - | 認識結果の時間の秒(ss) |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
maskingPolys | Array | - | maskingPolyの詳細情報 |
単価オブジェクト情報
単価オブジェクトの説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
text | String | - | 認識結果のテキスト |
formatted | Object | - | 認識結果のテキスト情報 |
formatted.value | String | - | 認識結果のテキストの値 |
keyText | String | - | 認識結果のテキストのキー |
confidenceScore | Float | - | 認識結果のテキストの信頼度
|
boundingPolys | Array | - | boundingPolyの詳細情報 |
boundingPolys
boundingPolys
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
vertices | Array | - | verticesの詳細情報 |
maskingPolys
maskingPolys
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
vertices | Array | - | verticesの詳細情報 |
boundingPolyVertices
boundingPolyVertices
の説明は次の通りです。
フィールド | タイプ | 必須の有無 | 説明 |
---|---|---|---|
x | Float | - | X軸の座標 |
y | Float | - | Y軸の座標 |
レスポンスステータスコード
CLOVA OCR APIで共通して使用されるレスポンスステータスコードの詳細は、CLOVA OCRの共通レスポンスステータスコードをご参照ください。
レスポンス例
レスポンスのサンプルコードは次の通りです。
成功
呼び出しに成功した場合のレスポンスのサンプルコードは次の通りです。
{
"version": "V2",
"requestId": "1234",
"timestamp": 1724976333747,
"images": [
{
"uid": "{uid}",
"name": "receipt_test",
"inferResult": "SUCCESS",
"message": "SUCCESS",
"validationResult": {
"result": "NO_REQUESTED"
},
"receipt": {
"meta": {
"estimatedLanguage": "ko"
},
"result": {
"storeInfo": {
"name": {
"text": "**スーパー",
"formatted": {
"value": "**スーパー"
},
"keyText": "",
"confidenceScore": 0.95703,
"boundingPolys": [
{
"vertices": [
{
"x": 32.0,
"y": 196.0
},
{
"x": 164.0,
"y": 196.0
},
{
"x": 164.0,
"y": 232.0
},
{
"x": 32.0,
"y": 232.0
}
]
}
],
"maskingPolys": []
},
"subName": {
"text": "**点",
"keyText": "",
"confidenceScore": 0.85623,
"boundingPolys": [
{
"vertices": [
{
"x": 164.0,
"y": 196.0
},
{
"x": 263.0,
"y": 196.0
},
{
"x": 263.0,
"y": 232.0
},
{
"x": 164.0,
"y": 232.0
}
]
}
],
"maskingPolys": []
},
"bizNum": {
"text": "***-**-*****",
"formatted": {
"value": "***-**-*****"
},
"keyText": "",
"confidenceScore": 0.93726,
"boundingPolys": [
{
"vertices": [
{
"x": 30.0,
"y": 237.0
},
{
"x": 233.0,
"y": 237.0
},
{
"x": 233.0,
"y": 270.0
},
{
"x": 30.0,
"y": 270.0
}
]
}
],
"maskingPolys": []
},
"addresses": [
{
"text": "ソウル特別市***",
"formatted": {
"value": "慶尚北道***"
},
"keyText": "",
"confidenceScore": 0.94554,
"boundingPolys": [
{
"vertices": [
{
"x": 33.0,
"y": 272.0
},
{
"x": 168.0,
"y": 274.0
},
{
"x": 167.0,
"y": 311.0
},
{
"x": 33.0,
"y": 309.0
}
]
},
],
"maskingPolys": []
}
],
"tel": [
{
"text": "***)***-****",
"formatted": {
"value": "**********"
},
"keyText": "TEL:",
"confidenceScore": 0.90208,
"boundingPolys": [
{
"vertices": [
{
"x": 320.0,
"y": 238.0
},
{
"x": 525.0,
"y": 238.0
},
{
"x": 525.0,
"y": 271.0
},
{
"x": 320.0,
"y": 271.0
}
]
}
]
}
]
},
"paymentInfo": {
"date": {
"text": "2014-01-21 (火)",
"formatted": {
"year": "2014",
"month": "01",
"day": "21"
},
"keyText": "",
"confidenceScore": 0.46487,
"boundingPolys": [
{
"vertices": [
{
"x": 30.0,
"y": 394.0
},
{
"x": 200.0,
"y": 394.0
},
{
"x": 200.0,
"y": 428.0
},
{
"x": 30.0,
"y": 428.0
}
]
},
{
"vertices": [
{
"x": 304.0,
"y": 394.0
},
{
"x": 360.0,
"y": 394.0
},
{
"x": 360.0,
"y": 429.0
},
{
"x": 304.0,
"y": 429.0
}
]
}
],
"maskingPolys": []
},
"time": {
"text": "16:53",
"formatted": {
"hour": "16",
"minute": "53",
"second": "00"
},
"keyText": "",
"confidenceScore": 0.92913,
"boundingPolys": [
{
"vertices": [
{
"x": 210.0,
"y": 394.0
},
{
"x": 304.0,
"y": 394.0
},
{
"x": 304.0,
"y": 429.0
},
{
"x": 210.0,
"y": 429.0
}
]
}
]
},
"cardInfo": {
"company": {
"text": "**カード",
"formatted": {
"value": "**カード"
},
"keyText": "[カード会社名]",
"confidenceScore": 0.92768,
"boundingPolys": [
{
"vertices": [
{
"x": 252.0,
"y": 1104.0
},
{
"x": 391.0,
"y": 1104.0
},
{
"x": 391.0,
"y": 1141.0
},
{
"x": 252.0,
"y": 1141.0
}
]
}
],
"maskingPolys": []
},
"number": {
"text": "37L 80-****-",
"formatted": {
"value": "37L 80-****-"
},
"keyText": "[カード番号]",
"confidenceScore": 0.35504,
"boundingPolys": [
{
"vertices": [
{
"x": 227.0,
"y": 1025.0
},
{
"x": 311.0,
"y": 1025.0
},
{
"x": 311.0,
"y": 1063.0
},
{
"x": 227.0,
"y": 1063.0
}
]
},
{
"vertices": [
{
"x": 368.0,
"y": 1030.0
},
{
"x": 491.0,
"y": 1030.0
},
{
"x": 491.0,
"y": 1057.0
},
{
"x": 368.0,
"y": 1057.0
}
]
}
],
"maskingPolys": []
}
},
"confirmNum": {
"text": "2881****",
"keyText": "[承認番号]",
"confidenceScore": 0.97677,
"boundingPolys": [
{
"vertices": [
{
"x": 254.0,
"y": 1224.0
},
{
"x": 394.0,
"y": 1224.0
},
{
"x": 394.0,
"y": 1257.0
},
{
"x": 254.0,
"y": 1257.0
}
]
}
]
}
},
"subResults": [
{
"items": [
{
"name": {
"text": "***)*ラーメン(マイルド味",
"formatted": {
"value": "***)*ラーメン(マイルド味"
},
"keyText": "",
"confidenceScore": 0.84299,
"boundingPolys": [
{
"vertices": [
{
"x": 32.0,
"y": 470.0
},
{
"x": 360.0,
"y": 470.0
},
{
"x": 360.0,
"y": 508.0
},
{
"x": 32.0,
"y": 508.0
}
]
}
],
"maskingPolys": []
},
"count": {
"text": "2個",
"formatted": {
"value": "2"
},
"keyText": "",
"confidenceScore": 0.94584,
"boundingPolys": [
{
"vertices": [
{
"x": 268.0,
"y": 511.0
},
{
"x": 328.0,
"y": 511.0
},
{
"x": 328.0,
"y": 547.0
},
{
"x": 268.0,
"y": 547.0
}
]
}
]
},
"price": {
"price": {
"text": "1,600",
"formatted": {
"value": "1600"
},
"keyText": "",
"confidenceScore": 0.95924,
"boundingPolys": [
{
"vertices": [
{
"x": 596.0,
"y": 514.0
},
{
"x": 685.0,
"y": 514.0
},
{
"x": 685.0,
"y": 549.0
},
{
"x": 596.0,
"y": 549.0
}
]
}
]
},
"unitPrice": {
"text": "800",
"formatted": {
"value": "800"
},
"keyText": "",
"confidenceScore": 0.78166,
"boundingPolys": [
{
"vertices": [
{
"x": 27.0,
"y": 513.0
},
{
"x": 90.0,
"y": 513.0
},
{
"x": 90.0,
"y": 547.0
},
{
"x": 27.0,
"y": 547.0
}
]
}
]
}
}
}
]
}
],
"totalPrice": {
"price": {
"text": "1,600",
"formatted": {
"value": "1600"
},
"keyText": "請求額:",
"confidenceScore": 0.89884,
"boundingPolys": [
{
"vertices": [
{
"x": 521.0,
"y": 751.0
},
{
"x": 678.0,
"y": 751.0
},
{
"x": 678.0,
"y": 786.0
},
{
"x": 521.0,
"y": 786.0
}
]
}
]
}
},
"subTotal": [
{
"taxPrice": [
{
"text": "145",
"formatted": {
"value": "145"
},
"keyText": "付加価値税:",
"confidenceScore": 0.93311,
"boundingPolys": [
{
"vertices": [
{
"x": 626.0,
"y": 631.0
},
{
"x": 683.0,
"y": 631.0
},
{
"x": 683.0,
"y": 667.0
},
{
"x": 626.0,
"y": 667.0
}
]
}
]
}
]
}
]
}
}
}
]
}
失敗
呼び出しに失敗した場合のレスポンスのサンプルコードは次の通りです。
{
"version": "V2",
"requestId": "4567",
"timestamp": 1725003278037,
"images": [
{
"uid": "{uid}",
"name": "receipt_test2",
"inferResult": "ERROR",
"message": "Read page:0 error.",
"validationResult": {
"result": "NO_REQUESTED"
}
}
]
}