領収書・レシートをプログラムから読み取るREST APIです。
レシートの写真を送信すると、構造化データ(店名・日付・金額・8%/10%の消費税内訳・カテゴリ・明細)が返ります。スキャン画像フォルダの一括取り込みなど、バッチ処理に向いています。
プロフィール設定 → API アクセス でAPIキーを発行します。キーが表示されるのは発行時の一度だけです — 安全な場所に保管してください。すべてのリクエストにベアラートークンとして付与します:
Authorization: Bearer rsk_live_xxxxxxxxxxxxxxxxxxxxxxxx
X-API-Key: rsk_live_... ヘッダーでも認証できます。キーは同じ設定ページからいつでも失効でき、失効したキーは即座に使えなくなります。キーは必ずサーバー側で管理してください — キーを持つ人は誰でも、あなたのスキャン枠を消費できます。
https://reshito.jp/api/v1
POST /api/v1/scan — multipart/form-data
| フィールド | 型 | 必須 | 備考 |
|---|---|---|---|
file | file | 必須 | JPEG / PNG / WebP / HEIC。最大20 MB。 |
project | string | 任意 | レシートを振り分けるプロジェクト名(既定: 個人)。 |
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" が含まれます。
429 quota_exceeded が返ります。422)は、スキャン枠を消費しません。アカウントごとに 60リクエスト/分・1,000リクエスト/時です。超過すると 429 rate_limited と Retry-After ヘッダー(秒)が返ります。大量取り込みの際は約1リクエスト/秒に調整し、Retry-After に従ってください。
エラーはJSONで返ります: {"error": "...", "code": "..."}
| ステータス | code | 意味 |
|---|---|---|
| 400 | no_file / file_too_large / bad_format / image_too_large | 画像がない、または形式・サイズが不正。 |
| 401 | missing_key / invalid_key | キー未指定、または無効・失効済みのキー。 |
| 403 | plan_ineligible | キーのアカウントがPro以上のプランではない(期限切れ・ダウングレード)。 |
| 413 | request_too_large | リクエストボディが20MBを超過。 |
| 422 | parse_failed | 画像を読み取れませんでした。error_receipt_id を含みます。スキャン枠は消費しません。 |
| 429 | quota_exceeded / rate_limited / too_many_failures | 月間枠の上限、リクエスト過多、または直近1時間の読み取り失敗が多すぎる場合(30回)。入力をご確認のうえ Retry-After に従ってください。 |
| 503 | api_disabled | メンテナンスのため一時停止中。時間をおいて再試行してください。 |
v1のエンドポイントは意図的に絞っています。以下は現時点ではWebアプリのみの機能です: 医療費モード、多通貨検出、組織(法人メンバー枠)でのスキャン、AIエンジン選択、Google Driveバックアップ。APIで読み取ったレシートも、通常どおりReshitoのダッシュボードや各種エクスポートに反映されます。
大量利用、カスタム連携、ご要望などは keihi@benstay.jp までご連絡ください。
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.
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.
https://reshito.jp/api/v1
POST /api/v1/scan — multipart/form-data
| Field | Type | Required | Notes |
|---|---|---|---|
file | file | yes | JPEG, PNG, WebP, or HEIC. Max 20 MB. |
project | string | no | Project/tag to file the receipt under (default 個人). |
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
}
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".
429 quota_exceeded.422) is logged but does not consume a scan from your quota.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 are JSON: {"error": "...", "code": "..."}.
| Status | code | Meaning |
|---|---|---|
| 400 | no_file / file_too_large / bad_format / image_too_large | Bad or missing image. |
| 401 | missing_key / invalid_key | No key, or unknown/revoked key. |
| 403 | plan_ineligible | The key's account isn't on a Pro+ plan (expired or downgraded). |
| 413 | request_too_large | Request body over 20 MB. |
| 422 | parse_failed | The image couldn't be read. Includes error_receipt_id. Does not consume quota. |
| 429 | quota_exceeded / rate_limited / too_many_failures | Monthly quota exhausted, too many requests, or too many failed scans in the past hour (30) — fix the input and honor Retry-After. |
| 503 | api_disabled | The API is temporarily offline for maintenance. Retry later. |
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.
High volume, a custom integration, or a feature you need? Email keihi@benstay.jp.