RoomCraft — v1.0.0 — 2026-03-19
RoomCraft REST API リファレンス。すべてのエンドポイントは /api プレフィックスを持ちます。
レスポンスのContent-TypeはすべてJSON (application/json) です。
| ステータスコード | 説明 |
|---|---|
| 400 | バリデーションエラー(必須パラメータ不足など) |
| 404 | リソースが見つからない |
| 500 | サーバー内部エラー |
{ "error": "エラーメッセージ" }
スタイルと予算に合わせた家具コーディネート提案を3パターン生成します。
リクエストボディ
{
"budget": 500000,
"roomWidth": 4,
"roomDepth": 5,
"style": "modern",
"makerIds": ["maker-id-1", "maker-id-2"]
}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
budget | number | 必須 | 予算(円) |
style | string | 必須 | スタイル: modern / natural / nordic / wa-modern |
roomWidth | number | 任意 | 部屋の幅(メートル)。デフォルト: 4 |
roomDepth | number | 任意 | 部屋の奥行き(メートル)。デフォルト: 5 |
makerIds | string[] | 任意 | 絞り込むメーカーIDの配列 |
レスポンス 200
{
"results": [
{
"id": "pattern-1-1700000000000",
"name": "ミニマルモダン",
"description": "洗練されたラインと機能美が融合した都市型リビング",
"totalPrice": 420000,
"products": [
{
"id": "product-id",
"name": "ソファ",
"price": 150000,
"maker": { "id": "maker-id", "name": "メーカー名", "logoUrl": "https://..." },
"category": { "id": "cat-id", "name": "ソファ", "slug": "sofa" },
"variants": []
}
]
}
],
"meta": {
"style": "modern",
"budget": 500000,
"roomArea": 20,
"generatedAt": "2026-03-19T00:00:00.000Z"
}
}
ユーザーのカート内容を取得します。
クエリパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
userId | string | 必須 | ユーザーID |
レスポンス 200
{
"data": [
{
"id": "cart-item-id",
"userId": "user-id",
"productId": "product-id",
"variantId": null,
"quantity": 2,
"createdAt": "2026-03-19T00:00:00.000Z",
"product": {
"id": "product-id",
"name": "商品名",
"maker": { "id": "maker-id", "name": "メーカー名" },
"category": { "id": "cat-id", "name": "カテゴリ名" }
},
"variant": null
}
]
}
カートに商品を追加します。同一商品・バリアントが既にある場合は数量を加算します。
リクエストボディ
{
"userId": "user-id",
"productId": "product-id",
"variantId": "variant-id",
"quantity": 1
}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
userId | string | 必須 | ユーザーID |
productId | string | 必須 | 商品ID |
variantId | string | 任意 | バリアントID |
quantity | number | 任意 | 数量。デフォルト: 1 |
レスポンス 201 — 追加・更新されたカートアイテムオブジェクト
カートから商品を削除します。
クエリパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | 必須 | カートアイテムID |
userId | string | 必須 | ユーザーID |
レスポンス 200
{ "success": true }
コミュニティ投稿一覧を取得します。
クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
status | string | PUBLISHED | 投稿ステータス: PUBLISHED / HIDDEN / REPORTED |
userId | string | - | 特定ユーザーの投稿に絞り込み |
page | number | 1 | ページ番号 |
pageSize | number | 12 | 1ページあたりの件数(最大50) |
レスポンス 200
{
"data": [
{
"id": "post-id",
"title": "私のリビングルーム",
"description": "北欧スタイルでまとめました",
"screenshotUrl": "https://...",
"likes": 42,
"status": "PUBLISHED",
"createdAt": "2026-03-19T00:00:00.000Z",
"user": { "id": "user-id", "name": "山田太郎", "avatarUrl": null },
"room": { "id": "room-id", "name": "リビング" }
}
],
"meta": { "total": 100, "page": 1, "pageSize": 12, "totalPages": 9 }
}
コミュニティに投稿を作成します。
リクエストボディ
{
"userId": "user-id",
"roomId": "room-id",
"title": "私のリビング",
"description": "説明文",
"screenshotUrl": "https://..."
}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
userId | string | 必須 | ユーザーID |
title | string | 必須 | タイトル |
roomId | string | 任意 | 関連ルームID |
description | string | 任意 | 説明文 |
screenshotUrl | string | 任意 | スクリーンショットURL |
レスポンス 201 — 作成された投稿オブジェクト
投稿にいいねを追加します(1リクエストにつき +1)。
パスパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | 投稿ID |
レスポンス 200
{ "id": "post-id", "likes": 43 }
メーカーの売上・閲覧数分析データを取得します。
クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
makerId | string | - | メーカーID(未指定で全メーカー) |
period | string | month | 期間: week / month / quarter / year |
レスポンス 200
{
"products": [
{
"productId": "product-id",
"productName": "ソファ A",
"views": 320,
"sales": 12,
"revenue": 1800000
}
],
"summary": {
"monthlyRevenue": 5000000,
"orderCount": 48,
"totalViews": 9500,
"conversionRate": 0.5
},
"period": "month",
"startDate": "2026-03-01T00:00:00.000Z",
"endDate": "2026-03-19T00:00:00.000Z"
}
メーカー向け注文一覧を取得します。
クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
makerId | string | - | メーカーID |
status | string | - | 注文ステータスで絞り込み |
page | number | 1 | ページ番号 |
pageSize | number | 30 | 1ページあたりの件数(最大100) |
レスポンス 200
{
"data": [
{
"id": "order-id",
"status": "PENDING",
"totalAmount": "150000.00",
"shippingAddress": { "postalCode": "150-0001", "prefecture": "東京都", "city": "渋谷区", "address1": "..." },
"createdAt": "2026-03-19T00:00:00.000Z",
"user": { "id": "user-id", "name": "山田太郎", "email": "yamada@example.com" },
"items": [
{
"id": "item-id",
"quantity": 1,
"price": "150000.00",
"product": { "id": "product-id", "name": "ソファ A", "price": "150000.00" },
"variant": null
}
]
}
],
"meta": { "total": 200, "page": 1, "pageSize": 30, "totalPages": 7 }
}
メーカーが管理する商品一覧を取得します。
クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
makerId | string | - | メーカーID |
q | string | - | 商品名・説明文の全文検索 |
status | string | - | ステータス: DRAFT / PUBLISHED / ARCHIVED |
page | number | 1 | ページ番号 |
pageSize | number | 20 | 1ページあたりの件数(最大100) |
レスポンス 200
{
"data": [
{
"id": "product-id",
"name": "ソファ A",
"slug": "sofa-a",
"price": "150000.00",
"status": "PUBLISHED",
"stockCount": 10,
"category": { "id": "cat-id", "name": "ソファ", "slug": "sofa" },
"variants": [],
"models": [{ "id": "model-id", "status": "READY" }],
"_count": { "orderItems": 12, "favorites": 30 }
}
],
"meta": { "total": 50, "page": 1, "pageSize": 20, "totalPages": 3 }
}
メーカー管理画面から商品を登録します。
リクエストボディ
{
"name": "ソファ A",
"slug": "sofa-a",
"description": "説明文",
"price": 150000,
"categoryId": "category-id",
"makerId": "maker-id",
"stockCount": 10,
"status": "DRAFT",
"variants": [
{ "type": "COLOR", "name": "カラー", "value": "ホワイト", "priceOverride": null, "stockCount": 5 }
]
}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | 必須 | 商品名 |
price | number | 必須 | 価格(円) |
categoryId | string | 必須 | カテゴリID(存在しない場合は自動作成) |
makerId | string | 任意 | メーカーID(省略時は最初のメーカーを使用) |
slug | string | 任意 | URL用スラッグ(省略時は自動生成) |
status | string | 任意 | DRAFT / PUBLISHED / ARCHIVED。デフォルト: DRAFT |
variants | array | 任意 | バリアント配列 |
レスポンス 201 — 作成された商品オブジェクト(category, maker, variants含む)
注文一覧を取得します(消費者向け)。
クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
userId | string | - | ユーザーIDで絞り込み |
status | string | - | 注文ステータスで絞り込み |
page | number | 1 | ページ番号 |
pageSize | number | 20 | 1ページあたりの件数(最大50) |
注文ステータス一覧
| ステータス | 説明 |
|---|---|
PENDING | 注文受付 |
CONFIRMED | 注文確認済み |
SHIPPED | 発送済み |
DELIVERED | 配達完了 |
CANCELLED | キャンセル |
RETURNED | 返品 |
レスポンス 200
{
"data": [
{
"id": "order-id",
"userId": "user-id",
"makerId": "maker-id",
"status": "PENDING",
"totalAmount": "150000.00",
"shippingAddress": {},
"trackingNumber": null,
"createdAt": "2026-03-19T00:00:00.000Z",
"maker": { "id": "maker-id", "name": "メーカー名", "logoUrl": null },
"items": []
}
],
"meta": { "total": 5, "page": 1, "pageSize": 20, "totalPages": 1 }
}
注文を作成します。
リクエストボディ
{
"userId": "user-id",
"makerId": "maker-id",
"items": [
{ "productId": "product-id", "variantId": null, "quantity": 1, "price": 150000 }
],
"shippingAddress": {
"postalCode": "150-0001",
"prefecture": "東京都",
"city": "渋谷区",
"address1": "1-1-1"
}
}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
userId | string | 必須 | ユーザーID |
makerId | string | 必須 | メーカーID |
items | array | 必須 | 注文明細(productId, quantity, price必須) |
shippingAddress | object | 必須 | 配送先住所 |
レスポンス 201 — 作成された注文オブジェクト(maker, items含む)
商品一覧を取得します(消費者向けカタログ)。
クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
q | string | - | 商品名・説明文の全文検索 |
categoryId | string | - | カテゴリIDで絞り込み |
makerId | string | - | メーカーIDで絞り込み |
status | string | PUBLISHED | ステータス(all で全件) |
minPrice | number | - | 価格下限(円) |
maxPrice | number | - | 価格上限(円) |
page | number | 1 | ページ番号 |
pageSize | number | 12 | 1ページあたりの件数(最大50) |
レスポンス 200
{
"data": [
{
"id": "product-id",
"name": "ソファ A",
"slug": "sofa-a",
"description": "...",
"price": "150000.00",
"status": "PUBLISHED",
"stockCount": 10,
"createdAt": "2026-03-19T00:00:00.000Z",
"maker": { "id": "maker-id", "name": "メーカー名", "logoUrl": null, "slug": "maker-slug" },
"category": { "id": "cat-id", "name": "ソファ", "slug": "sofa" },
"variants": [],
"models": [{ "id": "model-id", "status": "READY", "format": "glb" }]
}
],
"meta": { "total": 120, "page": 1, "pageSize": 12, "totalPages": 10 }
}
商品を作成します(管理者・メーカー向け)。
リクエストボディ
{
"name": "ソファ A",
"price": 150000,
"categoryId": "category-id",
"makerId": "maker-id",
"description": "説明文",
"stockCount": 10,
"status": "DRAFT",
"variants": []
}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | 必須 | 商品名 |
price | number | 必須 | 価格(円) |
categoryId | string | 必須 | カテゴリID |
makerId | string | 必須 | メーカーID |
レスポンス 201 — 作成された商品オブジェクト
商品詳細を取得します。3Dモデル情報・バリアント・カテゴリ階層を含みます。
パスパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | 商品ID |
レスポンス 200 — 商品オブジェクト(maker, category(parent含む), variants, models含む)
レスポンス 404
{ "error": "商品が見つかりません" }
商品情報を部分更新します。
リクエストボディ — 以下フィールドはすべて任意
{
"name": "新商品名",
"description": "更新説明文",
"price": 160000,
"categoryId": "new-category-id",
"stockCount": 5,
"status": "PUBLISHED"
}
レスポンス 200 — 更新後の商品オブジェクト
商品を削除します。
レスポンス 200
{ "success": true }
ユーザーの保存済みルーム一覧を取得します。
クエリパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
userId | string | system | ユーザーID |
page | number | 1 | ページ番号 |
pageSize | number | 20 | 1ページあたりの件数(最大50) |
レスポンス 200
{
"data": [
{
"id": "room-id",
"userId": "user-id",
"name": "リビングルーム",
"floorPlan": { "width": 4, "depth": 5 },
"furniture": [
{ "productId": "product-id", "x": 1.0, "y": 0, "z": 2.0, "rotation": 0 }
],
"wallSettings": { "color": "#ffffff" },
"floorSettings": { "material": "wood" },
"lightSettings": { "ambient": 0.5 },
"createdAt": "2026-03-19T00:00:00.000Z",
"updatedAt": "2026-03-19T00:00:00.000Z"
}
],
"meta": { "total": 3, "page": 1, "pageSize": 20, "totalPages": 1 }
}
新しいルームを作成します。
リクエストボディ
{
"name": "リビングルーム",
"userId": "user-id",
"floorPlan": { "width": 4, "depth": 5 },
"furniture": [],
"wallSettings": {},
"floorSettings": {},
"lightSettings": {}
}
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | 必須 | ルーム名 |
userId | string | 必須 | ユーザーID |
floorPlan | object | 任意 | 間取り設定JSON |
furniture | array | 任意 | 配置済み家具の配列 |
wallSettings | object | 任意 | 壁の設定JSON |
floorSettings | object | 任意 | 床の設定JSON |
lightSettings | object | 任意 | 照明の設定JSON |
レスポンス 201 — 作成されたルームオブジェクト
ルーム詳細を取得します。コミュニティ投稿への参照も含みます。
パスパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | ルームID |
レスポンス 200 — ルームオブジェクト(communityPosts含む)
レスポンス 404
{ "error": "ルームが見つかりません" }
ルームを部分更新します(3Dシミュレーターの自動保存に使用)。
リクエストボディ — 以下フィールドはすべて任意
{
"name": "更新ルーム名",
"furniture": [...],
"wallSettings": {},
"floorSettings": {},
"lightSettings": {}
}
レスポンス 200 — 更新後のルームオブジェクト
ルームを削除します。
レスポンス 200
{ "success": true }