API概要
JitsuFlow APIは、ブラジリアン柔術の道場運営と練習管理を効率化するためのRESTful APIです。
ベースURL
https://api.jitsuflow.app
注意: すべてのAPIリクエストにはHTTPSを使用してください。
認証
JitsuFlow APIはJWT(JSON Web Token)ベースの認証を使用します。
ログイン
POST
/api/auth/login
リクエストボディ
{
"email": "user@example.com",
"password": "your_password"
}
レスポンス
{
"token": "eyJhbGciOiJI...",
"user": {
"id": 1,
"email": "user@example.com",
"name": "山田太郎",
"role": "student"
}
}
認証ヘッダー
認証が必要なエンドポイントには、以下のヘッダーを含めてください:
Authorization: Bearer YOUR_JWT_TOKEN
エンドポイント
ユーザー管理
POST
/api/auth/register
新規ユーザー登録
{
"email": "user@example.com",
"password": "password123",
"name": "山田太郎"
}
GET
/api/users/profile
要認証
現在のユーザー情報を取得
道場管理
GET
/api/dojos
登録道場の一覧を取得
クエリパラメータ
city- 都市でフィルタリングlimit- 取得件数(デフォルト: 10)
GET
/api/dojos/:id
特定の道場の詳細情報を取得
予約システム
POST
/api/bookings
要認証
新規予約を作成
{
"dojo_id": 1,
"class_date": "2025-01-20",
"class_time": "19:00",
"class_type": "beginner"
}
GET
/api/bookings
要認証
ユーザーの予約一覧を取得
DELETE
/api/bookings/:id
要認証
予約をキャンセル(24時間前まで)
動画コンテンツ
GET
/api/videos
要認証
動画一覧を取得
クエリパラメータ
category- カテゴリでフィルタリングis_premium- プレミアムコンテンツのみ
GET
/api/videos/:id
要認証
動画の詳細情報と再生URLを取得
ECショップ
GET
/api/products
商品一覧を取得(46商品)
クエリパラメータ
category- gi, belt, protector, apparel, equipment, training, healingbrand- SWEEP, YAWARA
POST
/api/cart
要認証
商品をカートに追加
{
"product_id": 1,
"quantity": 1
}
決済処理
POST
/api/payments/create-payment-intent
要認証
Stripe決済インテントを作成
{
"amount": 15000,
"currency": "jpy",
"description": "SWEEP 柔術着 A2"
}
POST
/api/payments/create-subscription
要認証
プレミアム会員登録
{
"price_id": "price_premium_monthly",
"customer_email": "user@example.com"
}
レート制限
APIには以下のレート制限が適用されます:
- 1分間に100リクエストまで
- 制限を超えると429エラーが返されます
- ヘッダーで残りリクエスト数を確認可能
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1642089600
エラーハンドリング
JitsuFlow APIは一貫したエラーレスポンス形式を使用します。
エラーレスポンス形式
{
"error": "エラータイプ",
"message": "詳細なエラーメッセージ",
"code": "ERROR_CODE"
}
HTTPステータスコード
| コード | 説明 |
|---|---|
200 |
成功 |
201 |
作成成功 |
400 |
不正なリクエスト |
401 |
認証エラー |
403 |
アクセス拒否 |
404 |
リソースが見つかりません |
429 |
レート制限超過 |
500 |
サーバーエラー |
サンプルコード
JavaScript (Fetch API)
// ログイン
const login = async () => {
const response = await fetch('https://api.jitsuflow.app/api/auth/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: 'user@example.com',
password: 'password123'
})
});
const data = await response.json();
const token = data.token;
// トークンを保存
localStorage.setItem('jitsuflow_token', token);
};
// 認証付きリクエスト
const getBookings = async () => {
const token = localStorage.getItem('jitsuflow_token');
const response = await fetch('https://api.jitsuflow.app/api/bookings', {
headers: {
'Authorization': `Bearer ${token}`
}
});
return await response.json();
};
cURL
# ログイン
curl -X POST https://api.jitsuflow.app/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"password123"}'
# 認証付きリクエスト
curl https://api.jitsuflow.app/api/bookings \
-H "Authorization: Bearer YOUR_JWT_TOKEN"