검증할 수 있는 데이터를 돌려주는 OCR API
REST 호출 한 번으로, 값마다 box·quad·검증 판정이 붙은 구조화 JSON이 돌아옵니다. Bearer 인증, fields 선언 또는 autoFields, 비동기 작업, 서명 웹훅.
대부분의 OCR API는 페이지 전체 텍스트 덩어리와 신뢰도 점수 하나를 돌려줄 뿐입니다. 세금계산서 합계를 찾고, 파싱하고, 제자리에 들어갔기를 바라는 일은 결국 여러분 몫으로 남습니다. space-ocr의 OCR API는 그 구조화까지 해줍니다. 이미지와 원하는 필드 선언을 한 번 POST하면(스키마를 API가 제안하게 하려면 autoFields), 이름 붙인 값이 JSON으로 돌아옵니다.
프로덕션에서 진짜 중요한 건 각 값에 무엇이 따라오느냐입니다. data.cells 는 선언한 스키마와 같은 경로로 조회되고, 값을 읽어낸 박스, 그 박스의 네 꼭짓점, verified 판정, 그리고 그 판정의 근거가 된 사유가 들어 있습니다. 그래서 파이프라인은 모델의 말을 믿을 필요 없이 각 값을 문서 위 실제 위치와 대조하고, 어긋난 값은 data.review.flagged 목록으로 처리할 수 있습니다.
직접 살펴볼 수 있는 실제 응답
아래 어느 필드든 마우스를 올려 보세요 — 세금계산서 위의 박스가 그 값을 읽어낸 지점입니다. 이것은 실제 파싱 결과입니다. 청구처명 ソジュハンザン海物語様, 청구 금액 ¥84,263, 합계 ¥46,752, 각 품목 — 모두 자기 박스와 대조 근거와 함께 돌아옵니다. 목업이 아닙니다.

Each value with a box carries a verified on-page location — in data.cells[path], that is box + 4-point quad + evidence.match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.
space-ocr의 OCR API 작동 방식
Bearer 토큰으로 인증합니다 — 키는 spocr_로 시작하고, 베이스 URL은 https://api.space-ocr.com입니다. 래스터 이미지 한 장을 URL이나 base64로 POST /ocr/fields에 보냅니다(공개 API는 이미지 — JPEG·PNG·GIF·BMP·TIFF·WebP — 를 받으므로 PDF라면 페이지 이미지를 보냅니다). 직접 만든 fields를 선언하거나 autoFields를 켜면 { status: 'success', data: { values, cells, review, image } }가 돌아옵니다.
좌표는 모델이 지어낸 것이 아닙니다. 도형 정보의 출처는 OCR 패스 하나뿐이고, 모델은 값을 반환하며, 그다음 문자 매처가 각 값을 페이지에서 실제로 검출된 심볼과 대조합니다. 그 결과가 data.cells[path]에 담깁니다 — 위치를 가리키는 box·quad, 판정인 verified, 어긋났을 때의 사유를 담은 review, 그리고 text_match·match_ratio·printed_text 같은 evidence 입니다. 좌표는 값이 어디서 왔는지에 대한 근거이지 값이 옳다는 증명은 아닙니다. 두 엔진이 같은 오독에 합의할 수도 있으니 업무 규칙 검산은 그대로 두십시오. 모든 좌표는 0–1000으로 정규화돼 있고, 픽셀 환산은 data.image의 width·height로 합니다. 모든 응답에 X-Request-Id 헤더가 붙고, 오류는 { error: { code, message, requestId } }로 돌아옵니다.
curl -s https://api.space-ocr.com/ocr/fields \
-H "Authorization: Bearer $SPACE_OCR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image": "https://example.com/invoice.png",
"imageType": "url",
"fields": [
{ "name": "vendor", "type": "string", "required": true },
{ "name": "invoice_date", "type": "date", "required": true },
{ "name": "total", "type": "number", "required": true, "min": 0 },
{ "name": "items", "type": "array", "children": [
{ "name": "description", "type": "string" },
{ "name": "amount", "type": "number" }
] }
]
}'import os, requests
resp = requests.post(
"https://api.space-ocr.com/ocr/fields",
headers={"Authorization": f"Bearer {os.environ['SPACE_OCR_API_KEY']}"},
json={
"image": "https://example.com/invoice.png",
"imageType": "url",
"fields": [
{"name": "vendor", "type": "string", "required": True},
{"name": "invoice_date", "type": "date", "required": True},
{"name": "total", "type": "number", "required": True, "min": 0},
],
},
timeout=60,
)
resp.raise_for_status()
data = resp.json()["data"]
print(data["values"]) # business data, in the schema you declared
print(data.get("normalized")) # deterministic parse of the declared date and number
for item in data["review"]["flagged"]:
cell = data["cells"].get(item["path"]) # a missing or nobox flag has no cell
print(item["path"], item["reasons"], cell["box"] if cell else None)OCR API를 호출하는 방법
- API 키 받기로그인해 키를 만듭니다 — spocr_로 시작합니다. https://api.space-ocr.com 으로의 모든 요청에 Authorization: Bearer <key>로 보냅니다.
- 이미지 보내기POST /ocr/fields에 image(URL 또는 순수 base64)와 imageType을 보냅니다. PDF는 페이지 이미지를 보내세요 — API는 래스터 형식(JPEG·PNG·GIF·BMP·TIFF·WebP)을 받습니다.
- 필드 선언fields 에 값마다 이름과 타입을 적고, 규칙이 필요한 곳에 required·pattern·min/max·enum·label·near 를 덧붙입니다. 품목 표에는 children 이 있는 array 필드를 씁니다. 스키마를 API가 제안하게 하려면 대신 autoFields 를 켭니다.
- 구조화 결과 읽기{ status: 'success', data: { values, cells, review, image } } 가 반환됩니다. values 에 업무 데이터, cells[path] 에 그 값의 box·quad·verified 판정과 evidence, review.flagged 에 사유가 붙은 확인 대상 경로 목록이 담깁니다.
- 확장과 조회POST /upload로 많은 이미지를 큐에 넣고(파일마다 작업, 서명 웹훅 또는 GET /jobs/{jobId}), 저장된 시트를 GET /view로 where·sort·select를 써서 읽습니다 — OCR 재실행도 추가 비용도 없습니다.
단순하고 예측 가능한 가격
이미지당 ₩100(¥10 / $0.05), 신용카드 없이 월 100크레딧 무료 플랜 포함. 저장된 시트를 GET /view로 다시 읽는 것은 OCR 재실행이 아니라 무과금입니다. 정액 플랜은 월 크레딧 수·시트·저장공간을 추가합니다.