ベース URL

すべてのAPIリクエストは以下のベースURLに送信してください。

https://api.misebanai.com/api/v1

すべてのリクエスト・レスポンスは application/json 形式です(CSV出力を除く)。

認証

認証が必要なエンドポイントでは、リクエストヘッダーに JWT Bearer トークンを含めてください。トークンは Supabase Auth を通じて取得できます。

ヘッダー形式:

Authorization: Bearer <your_jwt_token>

トークンはダッシュボードへのログイン時に Supabase Auth から発行されます。有効期限が切れた場合はリフレッシュトークンを使用して再取得してください。

認証不要エンドポイント (Public)

以下のエンドポイントは認証なしでアクセスできます。

GET /api/v1/health ヘルスチェック

説明

APIサーバーの稼働状態を確認します。監視ツールやロードバランサーのヘルスチェックに使用できます。

リクエスト例

# ヘルスチェック
curl https://api.misebanai.com/api/v1/health

レスポンス例 (200 OK)

{
  "status": "ok",
  "version": "1.0.0",
  "timestamp": "2026-02-23T10:00:00Z"
}
GET /api/v1/pricing 料金プラン一覧

説明

利用可能な料金プランとその詳細情報を取得します。

リクエスト例

curl https://api.misebanai.com/api/v1/pricing

レスポンス例 (200 OK)

{
  "plans": [
    {
      "id": "free",
      "name": "Free",
      "price": 0,
      "cameras": 1,
      "retention_days": 7
    },
    {
      "id": "starter",
      "name": "Starter",
      "price": 2980,
      "cameras": 3,
      "retention_days": 30
    },
    {
      "id": "pro",
      "name": "Pro",
      "price": 9800,
      "cameras": 10,
      "retention_days": 90
    }
  ]
}
POST /api/v1/webhooks/line LINE Webhook受信

説明

LINE Messaging API からの Webhook イベントを受信します。LINE Developers コンソールで Webhook URL として設定してください。リクエストは LINE の署名検証により認証されます。

POST /api/v1/webhooks/stripe Stripe Webhook受信

説明

Stripe からの Webhook イベント(決済完了、サブスクリプション更新等)を受信します。Stripe の Webhook 署名検証により認証されます。

認証必須エンドポイント (JWT Required)

以下のエンドポイントにはすべて Authorization: Bearer <token> ヘッダーが必要です。

POST /api/v1/frames フレーム送信(カメラ映像分析)

説明

カメラからキャプチャしたフレーム画像を送信し、AI分析(来客カウント、動線分析等)を実行します。

リクエスト例

# フレーム画像を送信
curl -X POST https://api.misebanai.com/api/v1/frames \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "camera_id": "cam_01",
    "image": "<base64_encoded_image>",
    "timestamp": "2026-02-23T10:30:00Z"
  }'

レスポンス例 (200 OK)

{
  "frame_id": "frm_abc123",
  "analysis": {
    "people_count": 12,
    "zone_occupancy": {
      "entrance": 3,
      "register": 5,
      "aisle": 4
    }
  },
  "processed_at": "2026-02-23T10:30:01Z"
}
GET /api/v1/stores/me/stats 店舗統計情報

説明

ログイン中の店舗に紐づく統計サマリー(本日の来客数、ピーク時間帯、前日比等)を返します。

リクエスト例

curl https://api.misebanai.com/api/v1/stores/me/stats \
  -H "Authorization: Bearer <token>"

レスポンス例 (200 OK)

{
  "today_visitors": 142,
  "yesterday_visitors": 128,
  "change_rate": 10.9,
  "peak_hour": "13:00",
  "avg_stay_minutes": 18.5,
  "active_cameras": 3
}
GET /api/v1/stores/me/daily 日次レポート

説明

指定期間の日次レポートデータを取得します。クエリパラメータ fromto で期間を指定できます(YYYY-MM-DD形式)。

GET /api/v1/stores/me/cameras カメラ一覧

説明

店舗に登録されているカメラの一覧と各カメラのステータス(オンライン/オフライン、最終接続日時等)を返します。

GET /api/v1/stores/me/usage プラン使用状況

説明

現在のプランにおけるリソース使用状況(カメラ数、ストレージ、API呼び出し回数等)を返します。

GET /api/v1/stores/me/alerts アラート一覧

説明

店舗のアラート一覧を取得します。異常検知、カメラオフライン、来客急増等の通知が含まれます。

GET /api/v1/stores/me/alerts/count 未読アラート数

説明

未読アラートの件数を返します。ダッシュボードのバッジ表示等に使用できます。

PATCH /api/v1/alerts/:alert_id/read アラート既読

説明

指定したアラートを既読にします。:alert_id にはアラートのIDを指定してください。

POST /api/v1/alerts/read-all 全アラート既読

説明

すべての未読アラートを一括で既読にします。

GET /api/v1/stores/me/export/csv CSV出力 Pro以上

説明

統計データをCSV形式でエクスポートします。Pro プラン以上で利用可能です。クエリパラメータ fromto で期間を指定できます。

リクエスト例

# CSV出力(Pro以上)
curl https://api.misebanai.com/api/v1/stores/me/export/csv?from=2026-02-01&to=2026-02-23 \
  -H "Authorization: Bearer <token>" \
  -o report.csv

レスポンス例 (200 OK)

# Content-Type: text/csv
date,visitors,peak_hour,avg_stay_minutes
2026-02-01,135,12:00,17.2
2026-02-02,142,13:00,18.5
2026-02-03,98,11:00,15.8
...

エラー例 (403 Forbidden)

{
  "error": "plan_upgrade_required",
  "message": "CSV出力にはProプラン以上が必要です"
}

課金管理エンドポイント (Billing)

サブスクリプション管理と決済に関するエンドポイントです。すべて Authorization ヘッダーが必要です。

POST /api/v1/billing/checkout Stripe決済開始

説明

Stripe Checkout セッションを作成し、決済URLを返します。クライアント側でこのURLにリダイレクトしてください。

POST /api/v1/billing/portal 顧客ポータル

説明

Stripe カスタマーポータルのURLを返します。利用者はポータルでプラン変更、支払い方法の更新、請求書の確認が可能です。

GET /api/v1/billing/subscription サブスクリプション情報

説明

現在のサブスクリプションの状態(プラン名、ステータス、次回請求日等)を返します。

エラーレスポンス

APIはエラー時に適切なHTTPステータスコードと以下の形式のJSONレスポンスを返します。

{
  "error": "error_code",
  "message": "人間が読めるエラーメッセージ"
}

主なステータスコード