検証できるデータを返すOCR API
1回のRESTコールで、値ごとに box・quad・検証の判定が付いた構造化JSONが返ります。Bearer認証、fields の宣言または autoFields、非同期ジョブ、署名付きWebhook。
ほとんどのOCR APIは、ページ全体のテキストの塊と1つの信頼度スコアを返すだけです。請求書の合計を探し、パースし、正しい場所に入ったことを祈る——その作業は結局あなたの側に残ります。space-ocrのOCR APIは、その構造化までやります。画像と欲しいフィールドの宣言を1回POSTすれば(スキーマをAPI側に提案させたいときは autoFields)、名前付きの値がJSONで返ります。
本番で効いてくるのは、各値に何が付いてくるかです。data.cells は宣言したスキーマと同じパスで引けて、値を読み取ったボックス、その4つの角、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 です。ラスター画像を1枚、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 です。座標は値の出所を示す根拠であって、正しさの証明ではありません。2つのエンジンが同じ誤読で一致することもあるため、業務側の検算は残してください。座標はすべて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 で多数の画像をキューに入れ(ファイルごとにジョブ、署名付きWebhookまたは GET /jobs/{jobId})、保存済みシートを GET /view で where・sort・select を使って読みます——OCR再実行も追加料金もありません。
シンプルで予測できる料金
1枚あたり¥10($0.05 / ₩100)、クレジットカード不要・月100クレジットの無料枠付き。保存済みシートを GET /view で読み直すのはOCR再実行ではなく無課金です。定額プランは月間クレジット数・シート数・ストレージを追加します。