스키마 그대로의 JSON — 값마다 좌표가 붙고, 대조에 걸린 값은 검토 목록으로 돌아옵니다.
템플릿 없음. 학습 없음. 조용히 틀린 숫자 없음.
필드 이름을 적고, 값이 어떤 형식이어야 하는지 아신다면 그것도 함께 적습니다. 값마다 좌표와 플래그가 붙은 JSON 이 돌아오고, 아래 호출은 그대로 복사해 실행됩니다.
curl -X POST https://api.space-ocr.com/ocr/fields \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image": "https://example.com/receipt.jpg",
"imageType": "url",
"fields": [
{ "name": "store_name" },
{ "name": "invoice_no", "pattern": "^[0-9]{6}$" },
{ "name": "total", "type": "number", "required": true }
]
}'{
"status": "success",
"data": {
"values": {
"store_name": "Supermarket ABC",
"invoice_no": "10O482",
"total": "$4.94"
},
"cells": {
"invoice_no": {
"box": { "xmin": 612, "ymin": 96,
"xmax": 742, "ymax": 118 },
"quad": [ /* 4 corners */ ],
"verified": true,
"review": { "reasons": ["pattern_mismatch"] }
}
// …store_name, total — same shape
},
"review": {
"unit": "field", "declared": 3,
"returned": 3, "boxed": 3, "verified": 3,
"flagged": [
{ "path": "invoice_no",
"reasons": ["pattern_mismatch"] }
],
"by_reason": { "pattern_mismatch": 1 }
},
"normalized": { "invoice_no": "10O482", "total": 4.94 },
"image": { "width": 1654, "height": 2339 }
}
}학습도, 프로세서 설정도, 문서 타입 등록도 없습니다.
같은 페이지 3런 — 463개 값 중 16개만 움직였습니다.
값마다 좌표와 플래그가 붙습니다 — 전건 검수 대신 플래그만 보세요.
사진과 데이터베이스에 들어갈 필드 사이의 처리는 이미 만들어져 있습니다.


“이 금액, 원본 어디서 나온 건가요?”
값마다 원본 이미지를 가리키는 box / quad 좌표.
“같은 ¥711 이 네 줄에 있는데 왜 이걸 골랐죠?”
값을 OCR 원문과 한 자씩 맞춰 본 뒤에 좌표를 정합니다.
“전표가 90도 돌아서 들어옵니다”
회전도 기울기도 찍은 그대로의 사진으로 읽습니다.
“틀린 채로 통과하는 게 제일 무섭습니다”
모든 값을 OCR 원문과 상호 대조 — 확신할 수 없으면 review.flagged 에 올립니다.
비동기 + 서명된 Webhook
/jobs 폴링 · HMAC Webhook · OpenAPI 3.1.
결과를 둘 DB 가 필요 없습니다
폴더와 시트를 만들면 행이 쌓이고, /view 로 조건을 걸어 꺼냅니다.
파이프라인이 지나는 다섯 단계입니다.
글자와 그 글자가 있는 자리를 문자 단위로 찾습니다. 좌표가 만들어지는 건 이 단계뿐입니다.
원본 이미지와 읽어 낸 글자를 함께 보고, 요청한 항목이나 문서의 구조를 값으로 뽑아냅니다. 좌표는 지어내지 않습니다.
모델이 내놓은 값을 OCR 이 실제로 읽은 페이지 위 그 자리에 문자 단위로 앵커링합니다.
어긋난 값은 그 자리만 잘라 한 번 더 읽고, 그래도 확인되지 않으면 값 옆에 왜 걸렸는지가 함께 남습니다.
값마다 그 값을 읽어 온 자리의 box 와 quad 가 같이 옵니다.
같은 이미지, 같은 필드 스키마, 같은 채점 스크립트로 엔진마다 3런씩 돌렸습니다. 원문 응답과 채점 코드는 전부 공개돼 있습니다.

8 cases over 7 documents · 463 fields · 3 runs each · August 2026 — Mistral Document AI 와의 통제 실측.
API 가 돌려주는 검증된 값을 읽기 좋은 화면에 그대로 옮겼습니다. 값을 가리키면 사진이 대답합니다.
설정도 코드도 없습니다. 브라우저에 사진을 한 뭉치 끌어다 놓으면 행이 알아서 채워집니다.
셀에 마우스를 올리면 원본의 그 자리가 밝아집니다. 사진에서 값으로 가는 역방향도 똑같이 동작합니다.
교차검증을 통과하지 못한 값은 색으로 눈에 띕니다. 틀린 값이 조용히 묻히지 않으니 볼 것만 보면 됩니다.
원본을 옆에 둔 채로 값을 고칩니다. 창을 새로 열 일도, 어느 장에서 왔는지 뒤질 일도 없습니다.
시트는 엑셀에서 안 깨지는 CSV 로, 문서 묶음은 .md / .txt 로 내려받습니다.
업로드할 때 형식을 고릅니다. 읽어 낸 결과는 폴더에 쌓이고, 거기서 다시 조회하고 검색할 수 있습니다.
원하는 항목을 정하면 타입까지 붙여 돌려주고, 명세 행도 펼쳐 줍니다. 행은 시트에 쌓여 조회하거나 CSV 로 내보낼 수 있습니다.
제목·문단·목록·표 구조를 그대로 유지합니다. 문서 사이트나 위키, LLM 컨텍스트에 바로 넣을 수 있습니다.
문단 단위로 읽어 낸 원문 그대로입니다. 스캔을 색인하거나 검색·비교하기에 가장 담백한 형태입니다.
결과는 이름 붙인 폴더에 그대로 남습니다. 폴더 안에 폴더를 두고, 시트도 문서 묶음도 메모도 같은 자리에 들어갑니다.
쌓인 행을 조건으로 걸러 가져옵니다. where · sort · select 와 페이지네이션이 서버에서 처리됩니다.
트리를 훑어 내려가도 되고, 검색창에 한 번 치면 폴더와 파일 이름은 물론 메모 본문과 읽어 낸 셀 값까지 같이 걸립니다.
MCP 서버 하나만 연결하면 됩니다. 사진을 넘기면 에이전트가 종류대로 폴더와 시트를 만들어 한 장을 한 행으로 쌓고, 나중에 조건을 걸어 필요한 행만 찾아옵니다. 결과가 그 자리에 남으니 따로 데이터베이스를 세울 일이 없습니다.
MCP 를 지원하는 곳이면 어디서나