← Reshito

Reshito Scan API v1

領収書・レシートをプログラムから読み取るREST APIです。

レシートの写真を送信すると、構造化データ(店名・日付・金額・8%/10%の消費税内訳・カテゴリ・明細)が返ります。スキャン画像フォルダの一括取り込みなど、バッチ処理に向いています。

ご利用条件: APIアクセスは Pro・Team・Business プランでご利用いただけます。APIでのスキャンも、通常どおり月間スキャン枠を消費します。

認証

プロフィール設定 → API アクセス でAPIキーを発行します。キーが表示されるのは発行時の一度だけです — 安全な場所に保管してください。すべてのリクエストにベアラートークンとして付与します:

Authorization: Bearer rsk_live_xxxxxxxxxxxxxxxxxxxxxxxx

X-API-Key: rsk_live_... ヘッダーでも認証できます。キーは同じ設定ページからいつでも失効でき、失効したキーは即座に使えなくなります。キーは必ずサーバー側で管理してください — キーを持つ人は誰でも、あなたのスキャン枠を消費できます。

ベースURL

https://reshito.jp/api/v1

レシートを読み取る

POST /api/v1/scanmultipart/form-data

フィールド必須備考
filefile必須JPEG / PNG / WebP / HEIC。最大20 MB。
projectstring任意レシートを振り分けるプロジェクト名(既定: 個人)。

リクエスト例

curl -X POST https://reshito.jp/api/v1/scan \
  -H "Authorization: Bearer $RESHITO_API_KEY" \
  -F "file=@receipt.jpg"

レスポンス 200

{
  "receipts": [
    {
      "id": 12345,
      "date": "2026-06-09",
      "store_name": "スーパーマルエツ",
      "amount": 1480,
      "currency": "JPY",
      "taxable_8_amount": 800,  "tax_8_amount": 64,
      "taxable_10_amount": 560, "tax_10_amount": 56,
      "category": "食費",
      "payment_method": "クレジットカード",
      "registration_number": "T1234567890123",
      "confidence_score": 0.95,
      "items": [{"name": "牛乳", "amount": 220, "tax_status": "8", "is_expense": 1}],
      "notes": "",
      "possible_duplicate": false,
      "duplicate_ids": []
    }
  ],
  "quota": {
    "account_type": "pro", "limit": 200, "used": 37, "remaining": 163,
    "extra_scans_remaining": 0, "bonus_scans_remaining": 0
  },
  "processing_time": 2.4
}

1枚の写真に複数のレシートが写っている場合は、それぞれが receipts 配列の要素として返ります(最大10件)。プランの上限を超えて検出された場合、レスポンスに "truncated""per_photo_cap" が含まれます。

スキャン枠について

レート制限

アカウントごとに 60リクエスト/分1,000リクエスト/時です。超過すると 429 rate_limitedRetry-After ヘッダー(秒)が返ります。大量取り込みの際は約1リクエスト/秒に調整し、Retry-After に従ってください。

エラー

エラーはJSONで返ります: {"error": "...", "code": "..."}

ステータスcode意味
400no_file / file_too_large / bad_format / image_too_large画像がない、または形式・サイズが不正。
401missing_key / invalid_keyキー未指定、または無効・失効済みのキー。
403plan_ineligibleキーのアカウントがPro以上のプランではない(期限切れ・ダウングレード)。
413request_too_largeリクエストボディが20MBを超過。
422parse_failed画像を読み取れませんでした。error_receipt_id を含みます。スキャン枠は消費しません。
429quota_exceeded / rate_limited / too_many_failures月間枠の上限、リクエスト過多、または直近1時間の読み取り失敗が多すぎる場合(30回)。入力をご確認のうえ Retry-After に従ってください。
503api_disabledメンテナンスのため一時停止中。時間をおいて再試行してください。

v1の対象外

v1のエンドポイントは意図的に絞っています。以下は現時点ではWebアプリのみの機能です: 医療費モード、多通貨検出、組織(法人メンバー枠)でのスキャン、AIエンジン選択、Google Driveバックアップ。APIで読み取ったレシートも、通常どおりReshitoのダッシュボードや各種エクスポートに反映されます。

お問い合わせ

大量利用、カスタム連携、ご要望などは keihi@benstay.jp までご連絡ください。

Reshito Scan API v1

Read receipts and invoices programmatically.

Send a photo, get back structured data (store, date, amount, JCT tax breakdown, category, line items). Built for batch jobs — e.g. importing a folder of scans.

Plan required: API access is available on Pro, Team, and Business plans. Each scan counts against your normal monthly scan quota.

Authentication

Create an API key in your profile settings → API アクセス. The key is shown once — store it securely. Send it as a bearer token on every request:

Authorization: Bearer rsk_live_xxxxxxxxxxxxxxxxxxxxxxxx

The header X-API-Key: rsk_live_... is also accepted. Keys can be revoked any time from the same settings page; a revoked key immediately stops working. Keep keys server-side — anyone with a key can scan against your quota.

Base URL

https://reshito.jp/api/v1

Scan a receipt

POST /api/v1/scanmultipart/form-data

FieldTypeRequiredNotes
filefileyesJPEG, PNG, WebP, or HEIC. Max 20 MB.
projectstringnoProject/tag to file the receipt under (default 個人).

Example

curl -X POST https://reshito.jp/api/v1/scan \
  -H "Authorization: Bearer $RESHITO_API_KEY" \
  -F "file=@receipt.jpg"

Response 200

{
  "receipts": [
    {
      "id": 12345,
      "date": "2026-06-09",
      "store_name": "スーパーマルエツ",
      "amount": 1480,
      "currency": "JPY",
      "taxable_8_amount": 800,  "tax_8_amount": 64,
      "taxable_10_amount": 560, "tax_10_amount": 56,
      "category": "食費",
      "payment_method": "クレジットカード",
      "registration_number": "T1234567890123",
      "confidence_score": 0.95,
      "items": [{"name": "牛乳", "amount": 220, "tax_status": "8", "is_expense": 1}],
      "notes": "",
      "possible_duplicate": false,
      "duplicate_ids": []
    }
  ],
  "quota": {
    "account_type": "pro", "limit": 200, "used": 37, "remaining": 163,
    "extra_scans_remaining": 0, "bonus_scans_remaining": 0
  },
  "processing_time": 2.4
}

One photo may contain several receipts; each is returned as its own object in receipts (up to 10). If more were detected than your tier allows, the response includes "truncated" and "per_photo_cap".

Quota & billing

Rate limits

Per account: 60 requests/minute and 1,000 requests/hour. Over the limit returns 429 rate_limited with a Retry-After header (seconds). For large imports, throttle to ~1 request/second and honor Retry-After.

Errors

Errors are JSON: {"error": "...", "code": "..."}.

StatuscodeMeaning
400no_file / file_too_large / bad_format / image_too_largeBad or missing image.
401missing_key / invalid_keyNo key, or unknown/revoked key.
403plan_ineligibleThe key's account isn't on a Pro+ plan (expired or downgraded).
413request_too_largeRequest body over 20 MB.
422parse_failedThe image couldn't be read. Includes error_receipt_id. Does not consume quota.
429quota_exceeded / rate_limited / too_many_failuresMonthly quota exhausted, too many requests, or too many failed scans in the past hour (30) — fix the input and honor Retry-After.
503api_disabledThe API is temporarily offline for maintenance. Retry later.

Not in v1

The v1 endpoint is deliberately narrow. These are web-app only for now: medical-expense mode, multi-currency detection, organization (per-seat) scanning, AI-engine selection, and Google Drive backup. Scanned receipts still appear in your normal Reshito dashboard and exports.

Questions

High volume, a custom integration, or a feature you need? Email keihi@benstay.jp.