{
  "openapi": "3.0.0",
  "info": {
    "title": "バーチャルメイク",
    "description": "# 概要 (Overview)\nAI Makeup API (バーチャルメイク) で、セルフィー画像にバーチャルメイクを適用します。\nファンデーション、チーク、アイシャドウ、リップなどのメイクをサポートしています。\n\n**主な特徴：**\n*   **3D 顔レンダリング：** 3D 顔 AI 技術でメイクをレンダリングします。\n*   **特許技術：** ディープラーニングアルゴリズムにより実現しています。\n*   **リアルタイムの精度：** さまざまな照明条件に適応する顔トラッキング。\n*   **製品色の再現：** 実在の製品の色、質感（マットからメタリックまで）、仕上げを再現します。\n\n* 基本概念\n\n   * 色のブレンド\nディープラーニングを用いて、実在のメイク製品の色を再現します。\n\n   * 質感と仕上げの再現\nマットからメタリック、シマーからサテンまで、質感と仕上げをシミュレーションします。\n\n   * 光のバランス調整\n画像の照明条件を検出します。画像を補正してメイクを適用します。\n\n---\n\n## 統合ガイド (Integration Guide)\n\nMakeup Virtual Try-On サービスは非同期タスクとして動作します。まず、画像 URL と適用したいエフェクトのリストを指定して、メイク処理タスクを開始する必要があります。サーバーは `task_id` を返します。その後、ステータスを確認するエンドポイントを定期的にポーリングして、最終結果またはエラーを取得します。\n\n*   **エンドポイント：** `/v2.0/task/makeup-vto`\n*   **認証：** すべてのリクエストには `Authorization: Bearer <TOKEN>` が必要です。\n*   **ワークフロー：**\n    1.  **自撮り画像の準備：** 画像をアップロードするか、顔画像の既存のファイル URL を使用します。\n    1.  **タスクの開始 (`POST`)：** 画像 ID/URL とメイク設定を送信します。\n    1.  **タスク ID の取得：** レスポンスから `task_id` を取得します。\n    1.  **ステータスのポーリング (`GET`)：** `task_id` を使用してタスクのステータスを確認します。`task_status` が `\"success\"` または `\"error\"` になるまでポーリングを継続します。\n\n\n* API プレイグラウンド\n\nAPI プレイグラウンドで API を対話的にテストします：\n\n**API プレイグラウンド：**\n[http://yce.makeupar.com/api-console/en/api-playground/ai-makeup-virtual-try-on/](http://yce.makeupar.com/api-console/en/api-playground/ai-makeup-virtual-try-on/)\n\n---\n\n* 認証\n- **Bearer Token** を使用して、リクエストヘッダーに API キーを含めます：\n    ```\n    Authorization: Bearer <API Key>\n    ```\nAPI キーの確認場所: https://yce.makeupar.com/api-console/en/api-keys/.\n\n* 1. 自撮り画像のアップロード\n  元画像は次の 2 つの方法で提供できます：\n\n  - **既存の公開画像 URL を使用する**\n    アップロードの代わりに、AI タスクの開始時に公開アクセス可能な画像 URL を直接指定できます。\n\n  - **File API 経由でアップロードする**\n    次のエンドポイントを使用します：\n    ```\n    POST /s2s/v2.0/file\n    ```\n    これにより、後続のタスク実行に使用する `file_id` が返されます。\n\n    - ***重要***：File API を呼び出すだけではファイルはアップロードされません。**File API のレスポンスで提供される URL** に対して、**手動で**ファイルをアップロードする必要があります。その URL がアップロード先であるため、次に進む前にファイルが正常に転送されたことを確認してください。<br></br>\n    AI API を呼び出す前に、ファイルが正常にアップロードされていることを確認してください。File API を使用してアップロード URL を取得し、その場所にファイルをアップロードします。アップロードが完了すると、レスポンスに ***file_id*** が返されます。この ID を使用して、そのファイルに関連する AI 機能にアクセスします。\n\n      > **警告：** File API のレスポンスで提供された URL にファイルをアップロードせずに AI API を使用すると、500 Server Error / unknown_internal_error または 404 Not Found エラーが発生します。\n\n\n* 2. メイクタスクの開始\n\n`POST /s2s/v2.0/task/makeup-vto`\n\n指定された画像に対して新しいバーチャルメイクタスクを開始します。このエンドポイントは非同期であり、`task_id` を返します。\n\n   * リクエストヘッダー\n\n| ヘッダー | 値 |\n|--------|-------|\n| Content-Type | `application/json` |\n| Authorization | `Bearer YOUR_API_KEY` |\n\n   * リクエストボディの例\n```json\n{\n  \"src_file_url\": \"https://plugins-media.makeupar.com/strapi/assets/sample_Image_1_202b6bf6e6.jpg\",\n  \"effects\": [\n    {\n      \"category\": \"blush\",\n      \"pattern\": { \"name\": \"2colors6\" },\n      \"palettes\": [\n        { \"color\": \"#FF0000\", \"texture\": \"matte\", \"colorIntensity\": 50 },\n        { \"color\": \"#F2A53E\", \"texture\": \"matte\", \"colorIntensity\": 50 }\n      ]\n    },\n    {\n      \"category\": \"eye_liner\",\n      \"pattern\": { \"name\": \"3colors5\" },\n      \"palettes\": [\n        { \"color\": \"#000000\", \"texture\": \"matte\", \"colorIntensity\": 50 },\n        { \"color\": \"#BA0656\", \"texture\": \"matte\", \"colorIntensity\": 50 },\n        { \"color\": \"#089085\", \"texture\": \"matte\", \"colorIntensity\": 50 }\n      ]\n    }\n  ],\n  \"version\": \"1.0\"\n}\n```\n\n   * リクエストボディのスキーマ\n\n| フィールド | 型 | 説明 |\n|-------|------|---------|\n| `src_file_url` | string (URL) | 処理対象の自撮り画像への、公開アクセス可能な URL。 |\n| `effects` | array of Effect | 適用するメイクエフェクトオブジェクトの配列。詳細は [メークエフェクトのスキーマ](#makeup-effect-schemas) をご覧ください。 |\n| `version` | string | エフェクトペイロード構造の API バージョン。`\"1.0\"` を使用します。 |\n\n   * 成功時のレスポンス (`200 OK`)\nタスク識別子を含む JSON オブジェクトを返します。\n\n**レスポンスボディのスキーマ：**\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"task_id\": \"<string>\"\n  }\n}\n```\n\n**レスポンスの例：**\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"task_id\": \"grH0CvsgXuAIHLUzD0V1Ol34hoet3R1tvdbtiVHrDb6_UqCLKIejAIajwxrhOAfe\"\n  }\n}\n```\n\n   * エラーレスポンス (`400 Bad Request`、`401 InvalidApiKey` など)\n失敗を説明するメッセージを含む標準のエラーオブジェクトが返されます。\n\n**エラーレスポンスの例：**\n```json\n{\n  \"status\": 400,\n  \"error\": \"The operation could not be completed\",\n  \"error_code\": \"CreditInsufficiency\"\n}\n```\n\n---\n\n* 3. タスクのステータスと結果の取得\n\n`GET /s2s/v2.0/task/makeup-vto/<task_id>`\n\n進行中または完了したタスクの現在のステータスと結果を取得します。\n\n   * リクエストヘッダー\n\n| ヘッダー | 値 |\n|--------|-------|\n| Authorization | `Bearer YOUR_API_KEY` |\n\n   * パスパラメータ\n\n| パラメータ | 型 | 説明 |\n|-----------|------|---------|\n| task_id | string | タスク開始エンドポイントから返される識別子。 |\n\n   * 成功時のレスポンス (`200 OK`)\nステータスと、完了している場合は結果を含む JSON オブジェクト。\n\n**レスポンスボディのスキーマ：**\n```json\n{\n  \"data\": {\n    \"task_status\": \"<string>\", // 'success', 'error', or a processing state (e.g., 'queued', 'processing')\n    \"results\": [ // present only when task_status is 'success'\n      {\n        \"download_url\": \"<string>\" // URL to download the processed image\n      }\n    ],\n    \"failure_reason\": \"<string>\" // present only when task_status is 'error'\n  }\n}\n```\n\n**成功レスポンスの例：**\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"task_status\": \"success\",\n    \"results\": {\n      \"url\": \"https://s3.storage.prod/processed/image_123.jpg?token=...\"\n    }\n  }\n}\n```\n\n**エンジンエラーレスポンスの例：**\nAPI クエリは正常に送信されましたが、AI タスクの実行中にエラーが発生しました。\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"task_status\": \"error\",\n    \"error\": \"exceed_max_filesize\",\n    \"error_message\": \"string\",\n  }\n}\n```\n  > 注意：クエリエラーでもエンジンエラーでも、エラーが発生した場合はユニットは消費されません。\n\n**処理中レスポンスの例：**\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"task_status\": \"running\"\n  }\n}\n```\n\n   * エラーレスポンス\n*   `404 InvalidTaskId`：`task_id` が存在しないか、無効です。\n*   `401 InvalidApiKey`：API キーが無効か、指定されていません。\n*   `500 TaskTimeout`：タスクは正常に完了したか失敗したかのいずれかですが、保持期間を超過しています。\n\n**クエリエラーレスポンスの例：**\n```json\n{\n  \"status\": 401,\n  \"error_code\": \"InvalidApiKey\"\n}\n```\n  > 注意：クエリエラーでもエンジンエラーでも、エラーが発生した場合はユニットは消費されません。\n\n---\n## 入力と出力\n* メイクアップエフェクトスキーマ\n\nこのセクションでは、AI Makeup タスクのリクエストボディの完全な構造と制約について定義します。各エフェクトは、トップレベルの `effects` 配列内のオブジェクトです。\n\n* エフェクトコンテナ（トップレベル）\n\n```json\n{\n  \"version\": \"1.0\",\n  \"effects\": []                    // array<Effect> — Contains makeup effect objects\n}\n```\n\n* メイクアップエフェクトカテゴリ\n\n   * `skin_smooth`\n```json\n{\n  \"category\": \"skin_smooth\",           // string, const \"skin_smooth\"\n  \"skinSmoothStrength\": 50,            // integer, range: 0..100\n  \"skinSmoothColorIntensity\": 50       // integer, range: 0..100\n}\n```\n  > **注意!** ``skin_smooth`` エフェクトがリクエストに含まれていない場合、AI Makeup Engine は自動的に Skin Smooth の初期値 50 を適用します。\n  肌補正なしでメイクアップを適用したい場合は、``skinSmoothStrength`` と ``skinSmoothColorIntensity`` のすべてのパラメータを 0 に設定してください。ただし、最良の結果と最高品質のブレンドを得るには、初期値の肌補正を有効のままにすることをお勧めします。\n\n   * `blush`\n```json\n{\n  \"category\": \"blush\",                 // string, const \"blush\"\n  \"pattern\": {                         // object\n    \"name\": \"\"                         // string — MUST equal a `label` from blush.json\n  },\n  \"palettes\": [                        // array<BlushPalette>, minItems: (see colorNum in pattern)\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"texture\": \"matte\",              // string, enum [\"matte\",\"satin\",\"shimmer\"]\n      \"glowStrength\": 50,              // integer, range: 0..100 — REQUIRED if texture=\"satin\"\n      \"shimmerColor\": \"#fc288f\",       // string, hex color \"#RRGGBB\" — REQUIRED if texture=\"shimmer\"\n      \"shimmerDensity\": 50,            // integer, range: 0..100 — REQUIRED if texture=\"shimmer\"\n      \"colorIntensity\": 50             // integer, range: 0..100\n    }\n  ]\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/blush.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"1 color\",\n    \"label\": \"1color1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/483/a53cd4f4-43b6-4e19-b85a-ec7a95c6a47f.jpg\",\n    \"tags\": [\n      { \"id\": 100, \"name\": \"Blush 3D\" },\n      { \"id\": 103, \"name\": \"Oblong\" }\n    ],\n    \"colorNum\": 1\n  },\n  {\n    \"category\": \"2 colors\",\n    \"label\": \"2colors1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/147/a8d86a4b-8aa0-48d7-a716-63ec78dfb30b.jpg\",\n    \"tags\": [\n      { \"id\": 100, \"name\": \"Blush 3D\" }\n    ],\n    \"colorNum\": 2\n  },\n  {\n    \"category\": \"3 colors\",\n    \"label\": \"3colors1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/734/af8b625b-ae3a-4211-9413-f22c16a5f174.jpg\",\n    \"tags\": [\n      { \"id\": 100, \"name\": \"Blush 3D\" },\n      { \"id\": 104, \"name\": \"Round\" }\n    ],\n    \"colorNum\": 3\n  }\n]\n```\n\n\n   * `bronzer`\n```json\n{\n  \"category\": \"bronzer\",               // string, const \"bronzer\"\n  \"pattern\": { \"name\": \"\" },           // object — name MUST equal a `label` from bronzer.json\n  \"palettes\": [\n    { \"color\": \"#ff0000\", \"colorIntensity\": 50 }  // hex color, int range: 0..100\n  ]\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/bronzer.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"Bronzer\",\n    \"label\": \"Bronzer1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/973/22ff2c07-d584-4ae6-8281-c095cd121a52.jpg\",\n    \"tags\": [],\n    \"colorNum\": 1\n  }\n]\n```\n\n   * `concealer`\n```json\n{\n  \"category\": \"concealer\",             // string, const \"concealer\"\n  \"palettes\": [\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"colorIntensity\": 50,            // integer, range: 0..100\n      \"colorUnderEyeIntensity\": 50,    // integer, range: 0..100\n      \"coverageLevel\": 50              // integer, range: 0..100\n    }\n  ]\n}\n```\n\n   * `contour`\n```json\n{\n  \"category\": \"contour\",               // string, const \"contour\"\n  \"pattern\": { \"name\": \"\" },           // object — name MUST equal a `label` from contour.json\n  \"palettes\": [\n    { \"color\": \"#ff0000\", \"colorIntensity\": 50 }  // hex color, int range: 0..100\n  ]\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/contour.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"Heart face\",\n    \"label\": \"HeartFace2\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/731/49a1b3b9-b393-4bf4-b486-1493fe468436.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Invtriangle\",\n    \"label\": \"Invtriangle1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/858/a94c8cca-5f8c-4b8b-a02d-94edb6a4ad7f.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Oval face\",\n    \"label\": \"OvalFace6\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/906/644368a3-7eee-4ad9-829e-e2b3d4320fec.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Round face\",\n    \"label\": \"RoundFace4\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/106/3e455b5f-7e2d-46f7-8627-dc137051c144.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Triangle face\",\n    \"label\": \"TriangleFace2\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/528/18765180-c254-4411-a25c-c1d78f5c3d77.jpg\",\n    \"tags\": []\n  }\n]\n```\n\n   * `eyebrows`\n```json\n{\n  \"category\": \"eyebrows\",              // string, const \"eyebrows\"\n  \"pattern\": {\n    \"type\": \"shape\",                   // string, enum [\"shape\",\"color\"], default: \"shape\"\n    \"name\": \"\",                        // string, required when type=\"shape\" — label from eyebrows.json\n    \"curvature\": 0,                    // integer, range: -100..100 (shape only)\n    \"thickness\": 0,                    // integer, range: -100..100 (shape only)\n    \"definition\": 0                    // integer, range: 0..100 (shape only)\n  },\n  \"palettes\": [\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"colorIntensity\": 50,            // integer, range: 0..100\n      \"texture\": \"matte\",              // string, enum [\"matte\",\"shimmer\"]\n      \"shimmerColor\": \"#fc288f\",       // string, hex color \"#RRGGBB\" — REQUIRED if texture=\"shimmer\"\n      \"shimmerIntensity\": 50,          // integer, range: 0..100 — REQUIRED if texture=\"shimmer\"\n      \"shimmerSize\": 50,               // integer, range: 0..100 — REQUIRED if texture=\"shimmer\"\n      \"shimmerDensity\": 50             // integer, range: 0..100 — REQUIRED if texture=\"shimmer\"\n    }\n  ]\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/eyebrows.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"Arrow\",\n    \"label\": \"Arrow1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/490/1fb96bf9-979e-4327-a8c4-8c503f541f1a.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Curved\",\n    \"label\": \"Curved1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/389/1ccb300e-c7ed-4995-920e-7d1bf8da1fad.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Drama\",\n    \"label\": \"Drama2\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/196/5fb14bec-553d-4841-bba7-ca7e5e27c12e.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"High Arch\",\n    \"label\": \"HighArch1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/609/7a8676dc-6f6a-4b12-aab0-c50328e448c5.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Original\",\n    \"label\": \"Original2\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/300/123551e9-ca94-4732-89ed-5b3866678555.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Soft Arch\",\n    \"label\": \"SoftArch1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/121/2552ebf0-2705-43f7-b295-4fac21e18009.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Straight\",\n    \"label\": \"Straight1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/1/7734e777-8e51-41f1-abaf-205f0ed5e3b4.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Thin\",\n    \"label\": \"Thin1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/734/6ee10843-a251-4aa0-9183-db7f981d714d.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Upward\",\n    \"label\": \"Upward4\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/751/76578317-f475-49c7-bd96-910ccad617ef.jpg\",\n    \"tags\": []\n  }\n]\n```\n\n   * `eye_liner`\n```json\n{\n  \"category\": \"eye_liner\",             // string, const \"eye_liner\"\n  \"pattern\": { \"name\": \"\" },           // object — name MUST equal a label from eyeliner.json\n  \"palettes\": [\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"texture\": \"matte\",              // string, enum [\"matte\",\"shimmer\",\"metallic\"]\n      \"shimmerColor\": \"#fc288f\",       // string, hex color \"#RRGGBB\" — REQUIRED if texture in [\"shimmer\",\"metallic\"]\n      \"shimmerIntensity\": 50,          // integer, range: 0..100 — REQUIRED if texture in [\"shimmer\",\"metallic\"]\n      \"metallicIntensity\": 50,         // integer, range: 0..100 — REQUIRED if texture=\"metallic\"\n      \"colorIntensity\": 50             // integer, range: 0..100\n    }\n  ]\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/eyeliner.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"2 colors\",\n    \"label\": \"2colors1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/419/71d9429a-dc08-4e80-9c46-6e55631ef766.jpg\",\n    \"tags\": [\n      {\n        \"id\": 28,\n        \"name\": \"Drama\"\n      }\n    ],\n    \"colorNum\": 2\n  },\n  {\n    \"category\": \"3 colors\",\n    \"label\": \"3colors2\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/208/056aa6cd-8678-470c-b111-b7653d7ddf93.jpg\",\n    \"tags\": [\n      {\n        \"id\": 28,\n        \"name\": \"Drama\"\n      }\n    ],\n    \"colorNum\": 3\n  },\n  {\n    \"category\": \"1 color\",\n    \"label\": \"Arabic3\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/726/1919aad4-21a2-493a-a5f8-48bc99a61ba5.jpg\",\n    \"tags\": [\n      {\n        \"id\": 26,\n        \"name\": \"Arabic\"\n      }\n    ],\n    \"colorNum\": 1\n  }\n]\n```\n\n   * `eye_shadow`\n```json\n{\n  \"category\": \"eye_shadow\",            // string, const \"eye_shadow\"\n  \"pattern\": { \"name\": \"\" },           // object — name MUST equal a label from eyeshadow.json\n  \"palettes\": [\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"texture\": \"matte\",              // string, enum [\"matte\",\"shimmer\",\"metallic\"]\n      \"shimmerColor\": \"#fc288f\",       // string, hex color \"#RRGGBB\" — REQUIRED if texture in [\"shimmer\",\"metallic\"]\n      \"shimmerIntensity\": 50,          // integer, range: 0..100 — REQUIRED if texture in [\"shimmer\",\"metallic\"]\n      \"metallicIntensity\": 50,         // integer, range: 0..100 — REQUIRED if texture=\"metallic\"\n      \"colorIntensity\": 50             // integer, range: 0..100\n    }\n  ]                                    // minItems: (see colorNum in pattern)\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/eyeshadow.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"1 color\",\n    \"label\": \"1color1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/188/0322c4f9-e54d-4a6b-8072-6bb76560121a.jpg\",\n    \"tags\": [\n      {\n        \"id\": 12,\n        \"name\": \"Artistic\"\n      },\n      {\n        \"id\": 14,\n        \"name\": \"Dream\"\n      },\n      {\n        \"id\": 15,\n        \"name\": \"Trend\"\n      }\n    ],\n    \"colorNum\": 1\n  },\n  {\n    \"category\": \"2 colors\",\n    \"label\": \"2colors1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/938/3348211c-1b83-4ab2-9c6a-ce06e4aa3528.jpg\",\n    \"tags\": [\n      {\n        \"id\": 1,\n        \"name\": \"Fan shape\"\n      },\n      {\n        \"id\": 8,\n        \"name\": \"Only upper lid\"\n      }\n    ],\n    \"colorNum\": 2\n  },\n  {\n    \"category\": \"3 colors\",\n    \"label\": \"3colors1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/542/55e1b0fd-b888-47ff-bd3a-3dc1af2a7b69.jpg\",\n    \"tags\": [\n      {\n        \"id\": 1,\n        \"name\": \"Fan shape\"\n      },\n      {\n        \"id\": 8,\n        \"name\": \"Only upper lid\"\n      }\n    ],\n    \"colorNum\": 3\n  },\n  {\n    \"category\": \"4 colors\",\n    \"label\": \"4colors1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/429/29cd5839-464b-4a7a-a5c1-c7b40e9464d7.jpg\",\n    \"tags\": [\n      {\n        \"id\": 4,\n        \"name\": \"Closed banana\"\n      },\n      {\n        \"id\": 10,\n        \"name\": \"Whole eye\"\n      }\n    ],\n    \"colorNum\": 4\n  },\n  {\n    \"category\": \"5 colors\",\n    \"label\": \"5colors1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/2/824dcf7c-1273-4a30-8f1f-2137926057d6.jpg\",\n    \"tags\": [\n      {\n        \"id\": 4,\n        \"name\": \"Closed banana\"\n      },\n      {\n        \"id\": 10,\n        \"name\": \"Whole eye\"\n      }\n    ],\n    \"colorNum\": 5\n  }\n]\n```\n\n   * `eyelashes`\n```json\n{\n  \"category\": \"eyelashes\",             // string, const \"eyelashes\"\n  \"pattern\": { \"name\": \"\" },           // object — name MUST equal a label from eyelashes.json\n  \"palettes\": [\n    { \"color\": \"#ff0000\", \"colorIntensity\": 50 }  // hex color, int range: 0..100\n  ]\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/eyelashes.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"Artistic\",\n    \"label\": \"Artistic1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/146/7a8ed606-1c27-4d91-9320-c40a904f621f.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Natural\",\n    \"label\": \"Natural1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/287/cd5cae75-a1b3-48f8-8537-e6e259213901.png\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Upper&Lower\",\n    \"label\": \"Upper&Lower1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/18/2689ea2d-725e-4fa0-8563-df874ae1a83f.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Upper\",\n    \"label\": \"Upper1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/982/c99bf74e-545f-4da7-a314-f3bd84b82156.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"UpperDense\",\n    \"label\": \"UpperDense1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/888/452ec863-f0a8-40e7-aa33-31c0c39f57e2.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Winged\",\n    \"label\": \"Winged1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/825/36ab3859-eae5-49e4-9d97-161698bbb8bb.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Wispies\",\n    \"label\": \"Wispies1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/722/a2a727f6-748c-41e7-8ac0-c9c57c18c05a.png\",\n    \"tags\": []\n  }\n]\n```\n\n   * `foundation`\n```json\n{\n  \"category\": \"foundation\",            // string, const \"foundation\"\n  \"palettes\": [\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"colorIntensity\": 50,            // integer, range: 0..100\n      \"glowIntensity\": 50,             // integer, range: 0..100\n      \"coverageIntensity\": 50          // integer, range: 0..100\n    }\n  ]\n}\n```\n\n   * `highlighter`\n```json\n{\n  \"category\": \"highlighter\",           // string, const \"highlighter\"\n  \"pattern\": { \"name\": \"\" },           // object — name MUST equal a label from highlighter.json\n  \"palettes\": [\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"glowIntensity\": 50,             // integer, range: 0..100\n      \"shimmerIntensity\": 50,          // integer, range: 0..100\n      \"shimmerDensity\": 50,            // integer, range: 0..100\n      \"shimmerSize\": 50,               // integer, range: 0..100\n      \"colorIntensity\": 50             // integer, range: 0..100\n    }\n  ]\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/highlighter.json\n\n**固有のメイクアップパターンカテゴリ:**\n```json\n[\n  {\n    \"category\": \"Heart face\",\n    \"label\": \"HeartFace4\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/246/6ca40279-79cc-4918-b48a-64306009b365.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Invtriangle\",\n    \"label\": \"Invtriangle2\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/7/6b0b9760-612c-4319-bd81-855d262d8e89.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Oblong\",\n    \"label\": \"Oblong11\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/862/b7279f4e-edf2-43f3-8156-561fe5a52ec3.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Oval face\",\n    \"label\": \"OvalFace2\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/369/91097a05-9fd2-43cb-82e9-dd45e72b613b.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Round face\",\n    \"label\": \"RoundFace3\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/520/2d3ccbe2-36c3-43df-9e78-4c2c931fa431.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Square face\",\n    \"label\": \"SquareFace3\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/989/2959777b-19ca-4f4a-a023-3c8927191497.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Triangle face\",\n    \"label\": \"TriangleFace3\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/customer/guest/SkuCustomImage/765/221c1f12-c621-4567-a8ee-1433038ee8a2.jpg\",\n    \"tags\": []\n  }\n]\n```\n\n   * `lip_color`\n```json\n{\n  \"category\": \"lip_color\",             // string, const \"lip_color\"\n  \"shape\": {                           // object — driven by lipshape.json\n    \"name\": \"original\"                 // string — MUST equal a `label` from lipshape.json\n  },\n  \"morphology\": {                      // optional object\n    \"fullness\": 50,                    // integer, range: 0..100 (default: 0)\n    \"wrinkless\": 50                    // integer, range: 0..100 (default: 0)\n  },\n  \"palettes\": [                        // minItems depends on style; often ≥1\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"texture\": \"matte\",              // string, enum [\"matte\",\"gloss\",\"holographic\",\"metallic\",\"satin\",\"sheer\",\"shimmer\"]\n      \"colorIntensity\": 50,            // integer, range: 0..100\n      \"gloss\": 50,                     // int, range: 0..100 — REQUIRED if texture in [\"gloss\",\"holographic\",\"metallic\",\"sheer\",\"shimmer\"]\n      \"shimmerColor\": \"#ff0000\",       // string, hex color \"#RRGGBB\" — REQUIRED if texture in [\"holographic\",\"metallic\",\"shimmer\"]\n      \"shimmerIntensity\": 50,          // integer, range: 0..100 — REQUIRED if texture in [\"holographic\",\"metallic\",\"shimmer\"]\n      \"shimmerDensity\": 50,            // integer, range: 0..100 — REQUIRED if texture in [\"holographic\",\"metallic\",\"shimmer\"]\n      \"shimmerSize\": 50,               // integer, range: 0..100 — REQUIRED if texture in [\"holographic\",\"metallic\",\"shimmer\"]\n      \"transparencyIntensity\": 50      // integer, range: 0..100 — REQUIRED if texture in [\"gloss\",\"sheer\",\"shimmer\"]\n    }\n  ],\n  \"style\": {\n    \"type\": \"full\",                    // string, enum [\"full\",\"ombre\",\"twoTone\"]\n    \"innerRatio\": 50,                  // int, range: 0..100 — REQUIRED if type=\"ombre\"\n    \"featherStrength\": 50              // int, range: 0..100 — REQUIRED if type=\"ombre\"\n  }\n}\n```\n\n**パターンカタログ全体:**\nhttps://plugins-media.makeupar.com/wcm-saas/shapes/lipshape.json\n**異なるメイクパターンのカテゴリ:**\n```json\n[{\n        \"category\": \"general\",\n        \"label\": \"original\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/original.png\",\n        \"tags\": [\n        ]\n    }, {\n        \"category\": \"general\",\n        \"label\": \"heart-shaped\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/heart-shaped.jpg\",\n        \"tags\": [\n        ]\n    }, {\n        \"category\": \"general\",\n        \"label\": \"m-shaped\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/m-shaped.jpg\",\n        \"tags\": [\n        ]\n    }, {\n        \"category\": \"general\",\n        \"label\": \"petal\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/petal.jpg\",\n        \"tags\": [\n        ]\n    }, {\n        \"category\": \"general\",\n        \"label\": \"plump\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/plump.jpg\",\n        \"tags\": [\n        ]\n    }, {\n        \"category\": \"general\",\n        \"label\": \"pouty\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/pouty.jpg\",\n        \"tags\": [\n        ]\n    }, {\n        \"category\": \"general\",\n        \"label\": \"smile\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/smile.jpg\",\n        \"tags\": [\n        ]\n    }, {\n        \"category\": \"general\",\n        \"label\": \"vintage\",\n        \"thumbnail\": \"https://plugins-media.makeupar.com/wcm-saas/images/lipshapes/vintage.jpg\",\n        \"tags\": [\n        ]\n    }\n]\n```\n\n   * `lip_liner`\n```json\n{\n  \"category\": \"lip_liner\",             // string, const \"lip_liner\"\n  \"pattern\": { \"name\": \"\" },           // object — name MUST equal a label from lipliner.json\n  \"palettes\": [\n    {\n      \"color\": \"#ff0000\",              // string, hex color \"#RRGGBB\"\n      \"texture\": \"matte\",              // string, enum [\"matte\",\"satin\"]\n      \"colorIntensity\": 50,            // integer, range: 0..100\n      \"thickness\": 50,                 // integer, range: 0..100\n      \"smoothness\": 50                 // integer, range: 0..100\n    }\n  ]\n}\n```\n\n**パターンの全カタログ:**\nhttps://plugins-media.makeupar.com/wcm-saas/patterns/lipliner.json\n\n**異なるメイクパターンのカテゴリ:**\n```json\n[\n  {\n    \"category\": \"Large & Full\",\n    \"label\": \"Large&Full1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/417/7ac66cb2-2c7b-451c-8284-cc77791b7001.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Larger Lower\",\n    \"label\": \"LargerLower1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/878/84b2ef48-3af4-4851-86d2-b01d10db82b2.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Larger Upper\",\n    \"label\": \"LargerUpper1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/867/674f9f4c-7961-462e-8cc9-9a8acaad4168.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Natural\",\n    \"label\": \"Natural1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/258/7533c08a-cc9c-45ab-9294-5d5a8114037d.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Rosebud\",\n    \"label\": \"Rosebud1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/47/eb95e91f-6ef1-41f7-bc4f-aecd7d780c42.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Small\",\n    \"label\": \"Small1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/396/6b78e461-24a6-4c6d-afb4-88beb71f1732.jpg\",\n    \"tags\": []\n  },\n  {\n    \"category\": \"Wider\",\n    \"label\": \"Wider1\",\n    \"thumbnail\": \"https://app-cdn-01.makeupar.com/console/SkuCustomImage/guest/867/21f92b70-72b5-4a57-b4d7-81c5cce757a6.jpg\",\n    \"tags\": []\n  }\n]\n```\n\n---\n## ペイロードの例\n\nここでは、複数の効果を適用した有効な `effectJson` ペイロードの完全な例を示します。\n\n```json\n{\n  \"version\": \"1.0\",\n  \"effects\": [\n    {\n      \"category\": \"skin_smooth\",\n      \"skinSmoothStrength\": 55,\n      \"skinSmoothColorIntensity\": 45\n    },\n    {\n      \"category\": \"blush\",\n      \"pattern\": { \"name\": \"2colors1\" },\n      \"palettes\": [\n        {\n          \"color\": \"#e19f9f\",\n          \"texture\": \"matte\",\n          \"colorIntensity\": 60,\n          \"shimmerColor\": \"#d63252\",\n          \"shimmerDensity\": 50\n        },\n        {\n          \"color\": \"#c98a8a\",\n          \"texture\": \"satin\",\n          \"glowStrength\": 40,\n          \"colorIntensity\": 70\n        }\n      ]\n    },\n    {\n        \"category\": \"lip_color\",\n        \"shape\": { \"name\": \"plump\" },\n        \"morphology\": { \"fullness\": 30, \"wrinkless\": 25 },\n        \"style\": { \"type\": \"full\" },\n        \"palettes\": [\n            {\n                \"color\": \"#e11c43\",\n                \"texture\": \"gloss\",\n                \"colorIntensity\": 80,\n                \"gloss\": 75\n            }\n        ]\n    }\n  ]\n}\n```\nこの例では、`blush` は `blush.json` の `2colors1` パターンを使用しており、これには正確に 2 つのパレットが必要です。`lip_color` 効果は `lipshape.json` の `plump` シェイプを使用しています。\n\n## ファイル仕様とエラー (File Specs & Errors)\n* 対応フォーマットとサイズ\n\n|AI 機能|対応サイズ|対応ファイルサイズ|対応フォーマット|\n|  ----  | ----  | ----  | ----  |\n|バーチャルメイク (AI Makeup Virtual Try-On)|長辺 < 1920、顔の幅 >= 100|< 10MB|jpg/jpeg/png|\n\n* エラーコード\n\n|エラーコード|説明|\n|  ----  | ----  |\n|error_below_min_image_size|ソース画像のサイズが最小値より小さくなっています（期待値: 幅 >= 100px、高さ >= 100px）\n|error_exceed_max_image_size|ソース画像のサイズが最大値より大きくなっています（期待値: 幅 < 1920px、高さ < 1080px）\n|error_face_position_invalid |顔全体が画像内に完全に写っていることを確認してください|\n|error_face_position_too_small|検出された顔が小さすぎます。カメラにもっと近づいてください|\n|error_face_position_out_of_boundary|顔が大きすぎるか、画像フレームの一部が外に出ています。位置を調整してください|\n|error_face_angle_invalid|顔の角度が正しくありません。正面を向いた写真では頭を 10° 以内に保ってください。横向きの写真では 15° 以上にしてください。|\n\n* 環境と依存関係\n\n| サンプルコードの言語 / ツール | 推奨ランタイムバージョン |\n|---|---|\n| cURL | - bash >= 3.2</br>   - curl >= 7.58（モダンな TLS/HTTP 対応）</br>   - jq >= 1.6（堅牢な JSON パース） |\n| Node.js (JavaScript) | Node >= 18（グローバル fetch 用） |\n| JavaScript | - Chrome / Edge >= 80</br>   - Firefox >= 74</br>   - Safari >= 13.1 |\n| PHP | PHP >= 7.4（モダンな TLS/互換性のため）、ext-curl（推奨）または allow_url_fopen=On + ext-openssl、ext-json |\n| Python | Python >= 3.10（f-string を使用するため）、requests >= 2.20.0 |\n| Java | Java 11+（HttpClient を使用するため）、Jackson Databind >= 2.12.0 |\n\n---\n\n## JS Camera Kit\n{% partial file=\"/_partials/js-camera-kit.md\" /%}\n\n---\n\n## ユニット消費 (Unit Consumption)\n\n| AI 機能 | 消費ユニット数 |\n|---|---|\n| バーチャルメイク V1.0 | 1 |\n\n---\n",
    "version": "",
    "termsOfService": "https://www.makeupar.com/perfectbeauty/youcam/terms-of-service-api",
    "contact": {
      "email": "YouCamOnlineEditor_API@perfectcorp.com"
    },
    "license": {
      "name": "Privacy policy",
      "url": "https://www.makeupar.com/perfectbeauty/youcam/privacy-policy-api"
    }
  },
  "servers": [
    {
      "url": "https://yce-api-01.makeupar.com"
    }
  ],
  "paths": {
    "/s2s/v2.0/task/makeup-vto": {
      "post": {
        "summary": "バーチャルメイクタスクを実行します。",
        "description": "このエンドポイントは、バーチャルメイク処理を開始します。ソースファイル（URL または File ID 経由）を提供し、定義されたエフェクトスキーマを使用して適用するエフェクトを指定する必要があります。タスクは非同期で処理され、このレスポンスで返される task_id を使用してステータスを確認できます。\n",
        "tags": [
          "V1.0"
        ],
        "security": [
          {
            "BearerAuthenticationV2": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BasicRunTaskV2"
                  },
                  {
                    "type": "object",
                    "required": [
                      "effects"
                    ],
                    "properties": {
                      "version": {
                        "type": "string",
                        "description": "メイクエフェクト仕様のバージョン。特に指定がない限り、初期値は `\"1.0\"` です。\n",
                        "default": "1.0",
                        "example": "1.0"
                      },
                      "effects": {
                        "type": "array",
                        "description": "適用するメイクエフェクトの配列。各エフェクトオブジェクトは `category` を指定し、そのメイクタイプのスキーマに一致する必要があります。\n",
                        "items": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/SkinSmoothEffect"
                            },
                            {
                              "$ref": "#/components/schemas/BlushEffect"
                            },
                            {
                              "$ref": "#/components/schemas/BronzerEffect"
                            },
                            {
                              "$ref": "#/components/schemas/ConcealerEffect"
                            },
                            {
                              "$ref": "#/components/schemas/ContourEffect"
                            },
                            {
                              "$ref": "#/components/schemas/EyebrowsEffect"
                            },
                            {
                              "$ref": "#/components/schemas/EyelinerEffect"
                            },
                            {
                              "$ref": "#/components/schemas/EyeshadowEffect"
                            },
                            {
                              "$ref": "#/components/schemas/EyelashesEffect"
                            },
                            {
                              "$ref": "#/components/schemas/FoundationEffect"
                            },
                            {
                              "$ref": "#/components/schemas/HighlighterEffect"
                            },
                            {
                              "$ref": "#/components/schemas/LipColorEffect"
                            },
                            {
                              "$ref": "#/components/schemas/LipLinerEffect"
                            }
                          ]
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "タスクの実行が成功しました",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BasicRunTaskResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "タスクの実行が失敗しました",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/responses/RunError"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/InvalidApiKey"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/s2s/v2.0/task/makeup-vto/{task_id}": {
      "get": {
        "summary": "バーチャルメイクタスクのステータスを確認します。",
        "tags": [
          "V1.0"
        ],
        "security": [
          {
            "BearerAuthenticationV2": []
          }
        ],
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "example": "grH0CvsgXuAIHLUzD0V1Ol34hoet3R1tvdbtiVHrDb6_UqCLKIejAIajwxrhOAfe"
            },
            "description": "確認するタスクの ID"
          }
        ],
        "responses": {
          "200": {
            "description": "タスクステータスの確認が成功しました",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskStatusResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidTaskId"
          },
          "401": {
            "$ref": "#/components/responses/InvalidApiKey"
          },
          "500": {
            "$ref": "#/components/responses/TaskTimeout"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuthenticationV2": {
        "type": "http",
        "scheme": "bearer",
        "description": "標準の 'Bearer authentication' を使用します。ヘッダーに 'API Key' を設定してください: `Authorization:Bearer YOUR_API_KEY`。'Bearer' と 'YOUR_API_KEY' の間にスペースが 1 つ必要です。"
      }
    },
    "schemas": {
      "EngineErrorCode": {
        "type": "string",
        "nullable": true,
        "enum": [
          "exceed_max_filesize",
          "invalid_parameter",
          "error_download_image",
          "error_decode_image",
          "error_nsfw_content_detected",
          "error_inference",
          "unknown_internal_error"
        ],
        "description": "エラー:\n\n- `exceed_max_filesize` - 入力ファイルサイズが最大制限を超えています\n\n- `invalid_parameter` - 無効なパラメータ値です\n\n- `error_download_image` - ソース画像のダウンロードエラーです\n\n- `error_decode_image` - ソース画像のデコードエラーです\n\n- `unknown_internal_error` - その他\n"
      },
      "FileV1.1": {
        "title": "File V1.1",
        "description": "このオブジェクトはファイルを表します。",
        "type": "object",
        "required": [
          "files"
        ],
        "properties": {
          "files": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "content_type",
                "file_name",
                "file_size"
              ],
              "properties": {
                "content_type": {
                  "type": "string",
                  "example": "image/jpg",
                  "description": "このファイルのコンテンツ MIME タイプ。現在利用可能な値は enum に記載されています。"
                },
                "file_name": {
                  "type": "string",
                  "example": "my-selfie.jpg",
                  "description": "このファイルの名前"
                },
                "file_size": {
                  "type": "integer",
                  "example": 50000,
                  "description": "このファイルのコンテンツ長（バイト単位）。10MB を超えてはいけません。"
                }
              }
            }
          }
        }
      },
      "BasicFileResponse": {
        "type": "object",
        "properties": {
          "files": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "content_type": {
                  "type": "string",
                  "example": "image/jpg",
                  "description": "このファイルのコンテンツ MIME タイプ。"
                },
                "file_name": {
                  "type": "string",
                  "example": "my-selfie.jpg",
                  "description": "このファイルの名前"
                },
                "file_id": {
                  "type": "string",
                  "example": "U8aqJbsXGT537jtGnEDFHqxdDXqh8+oTF/cSkLimzuvVwMP+Jb1XbjPsf7ZgUgLY",
                  "description": "このファイルの ID。他のタスク実行 API でこの `file_id` が必要です。"
                },
                "requests": {
                  "type": "array",
                  "description": "以下の `url`、`headers`、`method` を使用してファイルをアップロードします。完了後、`file_id` を使用してタスク実行 API の呼び出しを進めます。",
                  "items": {
                    "type": "object",
                    "properties": {
                      "headers": {
                        "type": "object",
                        "example": {
                          "Content-Type": "image/jpg",
                          "Content-Length": 50000
                        },
                        "description": "ファイルアップロード時に含めるヘッダー"
                      },
                      "url": {
                        "type": "string",
                        "example": "https://example.com/presigned-upload-url",
                        "description": "このファイルをアップロードする URL"
                      },
                      "method": {
                        "type": "string",
                        "example": "PUT",
                        "description": "このファイルをアップロードする HTTP メソッド"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "FileResponseV2": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "example": 200,
            "description": "レスポンスステータス"
          },
          "data": {
            "$ref": "#/components/schemas/BasicFileResponse"
          }
        }
      },
      "BasicRunTaskV2SrcFileUrl": {
        "title": "ソースファイル URL でタスクを実行",
        "type": "object",
        "required": [
          "src_file_url"
        ],
        "properties": {
          "src_file_url": {
            "type": "string",
            "description": "タスクを実行するファイルの URL。この URL は公開アクセス可能である必要があります。",
            "example": "https://example.com/selfie.jpg"
          }
        }
      },
      "BasicRunTaskV2SrcFileId": {
        "title": "ソースファイル ID でタスクを実行",
        "type": "object",
        "required": [
          "src_file_id"
        ],
        "properties": {
          "src_file_id": {
            "type": "string",
            "description": "タスクを実行するファイルの ID。ファイルアップロード API からの File ID です。",
            "example": "pfNK5PuRe0MrwLHcGA3DOmB1ahwfXTbYHjv+KoBIxbE="
          }
        }
      },
      "BasicRunTaskV2": {
        "title": "BasicRunTaskV2",
        "anyOf": [
          {
            "$ref": "#/components/schemas/BasicRunTaskV2SrcFileUrl"
          },
          {
            "$ref": "#/components/schemas/BasicRunTaskV2SrcFileId"
          }
        ]
      },
      "BasicRunTaskResponseV2": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "description": "レスポンスステータス",
            "example": 200
          },
          "data": {
            "type": "object",
            "properties": {
              "task_id": {
                "type": "string",
                "description": "このタスクの ID。タスク結果はこの ID で 24 時間有効です。",
                "example": "grH0CvsgXuAIHLUzD0V1Ol34hoet3R1tvdbtiVHrDb6_UqCLKIejAIajwxrhOAfe"
              }
            }
          }
        }
      },
      "TaskStatusResponseBodySingleUrlResultsV2": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "この結果をダウンロードする URL。2 時間有効です。",
            "example": "https://example.com/sample-result-url"
          }
        }
      },
      "TaskStatusResponseV2": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "description": "レスポンスステータス",
            "example": 200
          },
          "data": {
            "type": "object",
            "properties": {
              "task_status": {
                "type": "string",
                "enum": [
                  "running",
                  "success",
                  "error"
                ],
                "description": "このタスクのステータス"
              },
              "error": {
                "$ref": "#/components/schemas/EngineErrorCode"
              },
              "error_message": {
                "type": "string",
                "description": "エラーの詳細説明"
              },
              "results": {
                "$ref": "#/components/schemas/TaskStatusResponseBodySingleUrlResultsV2"
              }
            }
          }
        }
      },
      "SkinSmoothEffect": {
        "type": "object",
        "description": "肌に対して適用される AI 生成のスムージングを制御します。skin_smooth エフェクトが提供されない場合、システムは現実的なブレンドのために強度 50 のスムージングを自動的に適用します。\n",
        "required": [
          "category"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "skin_smooth"
            ],
            "description": "このエフェクトが肌スムージングエフェクトであることを識別します。常に \"skin_smooth\" である必要があります。\n"
          },
          "skinSmoothStrength": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "default": 50,
            "description": "全体の肌テクスチャに適用されるスムージングの強度。値が高いほど、より柔らかくエアブラシをかけたような肌の外観になります。\n"
          },
          "skinSmoothColorIntensity": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "default": 50,
            "description": "スムージング処理中に適用される色のブレンド強度です。肌トーンの統一と色の不均一性の低減に役立ちます。"
          }
        },
        "example": {
          "category": "skin_smooth",
          "skinSmoothStrength": 50,
          "skinSmoothColorIntensity": 50
        }
      },
      "BlushEffect": {
        "type": "object",
        "description": " predefined パターンとカスタマイズ可能なカラーパレットを使用して、頬にチークを適用します。パターン名は、公式の blush.json パターンカタログのラベルと一致する必要があります。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "blush"
            ],
            "description": "このエフェクトがチークエフェクトであることを識別します。常に \"blush\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "description": "顔へのチークの配置方法を定義します。各パターンは、blush.json 内の顔の形状とレイアウトに対応しています。",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "チークパターンの名前です。blush.json パターンカタログの `label` と一致する必要があります。",
                "example": "1color1"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "カラーパレットエントリのリストです。必要なパレットの数は、選択したチークパターンで定義されている `colorNum` フィールドに依存します。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "texture",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "16 進数形式（#RRGGBB）のメインチークカラーです。チーク適用時の主要な顔料として使用されます。",
                  "pattern": "^#?[0-9A-Fa-f]{6}$"
                },
                "texture": {
                  "type": "string",
                  "enum": [
                    "matte",
                    "satin",
                    "shimmer"
                  ],
                  "description": "チークの質感：\n  - matte：純粋な顔料、光沢なし\n  - satin：ソフトな輝き、glowStrength が必要\n  - shimmer：キラキラまたは輝き、shimmer パラメータが必要"
                },
                "glowStrength": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "サテンチーク質感の輝き強度です。texture = \"satin\" または \"shimmer\" の場合に必須です。"
                },
                "shimmerColor": {
                  "type": "string",
                  "description": "シマー粒子の色です。texture = \"shimmer\" の場合に必須です。"
                },
                "shimmerDensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "チーク適用時のシマー粒子の密度です。texture = \"shimmer\" の場合に必須です。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "ベース顔料に対するチークカラーの強度です。"
                }
              }
            }
          }
        },
        "example": {
          "category": "blush",
          "pattern": {
            "name": "1color1"
          },
          "palettes": [
            {
              "color": "#ff7777",
              "texture": "matte",
              "colorIntensity": 60
            }
          ]
        }
      },
      "BronzerEffect": {
        "type": "object",
        "description": "ブロンザーを適用して肌トーンを暖かくし、日焼けしたような輪郭を追加します。パターン名は bronzer.json のエントリと一致する必要があります。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "bronzer"
            ],
            "description": "このエフェクトがブロンザーエフェクトであることを識別します。常に \"bronzer\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "required": [
              "name"
            ],
            "description": "ブロンザーの適用レイアウトを定義します。パターン名は bronzer.json の `label` と一致する必要があります。",
            "properties": {
              "name": {
                "type": "string",
                "example": "Bronzer1",
                "description": "bronzer.json カタログからのブロンザーパターンの名前です。"
              }
            }
          },
          "palettes": {
            "type": "array",
            "description": "ブロンザーパレットには、顔料の色と強度のコントロールが含まれます。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "16 進数形式（#RRGGBB）のブロンザーカラーです。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "ブロンザー顔料の強度です。"
                }
              }
            }
          }
        },
        "example": {
          "category": "bronzer",
          "pattern": {
            "name": "Bronzer1"
          },
          "palettes": [
            {
              "color": "#c08050",
              "colorIntensity": 50
            }
          ]
        }
      },
      "ConcealerEffect": {
        "type": "object",
        "description": "コンシーラーを追加して、肌トラブルを中和し、肌トーンを整え、目の下を明るくします。コンシーラーはパターンを使用せず、顔料と強度のコントロールのみを使用します。すべての顔面ゾーンで一貫した動作を確保するために、すべてのパレットフィールドが必須です。",
        "required": [
          "category",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "concealer"
            ],
            "description": "このエフェクトがコンシーラーエフェクトであることを識別します。常に \"concealer\" である必要があります。"
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "色と強度の特性を定義する 1 つ以上のコンシーラーパレットです。同じパレットが、目の下、額、あごの補正ゾーンなど、関連する顔面領域に適用されます。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "colorIntensity",
                "colorUnderEyeIntensity",
                "coverageLevel"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "16 進数 RGB 形式（#RRGGBB）のコンシーラーシェードです。通常、肌トーンと一致するか、わずかに明るくする必要があります。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "顔全体に適用される一般的なコンシーラー顔料の強度です。"
                },
                "colorUnderEyeIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "目の下領域に特化した顔料強度のコントロールです。他のゾーンへの過剰な適用なく、クマを明るくするのに役立ちます。"
                },
                "coverageLevel": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "コンシーラーのカバレッジの不透明度を決定します。値が高いほど、色ムラや肌トラブルをより多く隠します。"
                }
              }
            }
          }
        },
        "example": {
          "category": "concealer",
          "palettes": [
            {
              "color": "#e6c7a8",
              "colorIntensity": 50,
              "colorUnderEyeIntensity": 50,
              "coverageLevel": 60
            }
          ]
        }
      },
      "ContourEffect": {
        "type": "object",
        "description": "特定の顔の形状に合わせたパターンを使用して、顔の造形のためのコントゥアリングを定義します。コントゥアパターンはハイライト/シャドウの配置を決定し、パレットはコントゥアシェードを制御します。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "contour"
            ],
            "description": "このエフェクトがコントゥアエフェクトであることを識別します。常に \"contour\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "required": [
              "name"
            ],
            "description": "顔へのコントゥアシャドウの適用場所を定義します。contour.json で定義されているパターン名（例：HeartFace2, OvalFace6）を使用する必要があります。",
            "properties": {
              "name": {
                "type": "string",
                "description": "コントゥアパターンの名前です。contour.json の `label` と一致する必要があります。",
                "example": "OvalFace6"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "コントゥアリングに使用される顔料を定義します。通常、ファンデーションよりも暗いクールトーンまたはニュートラルシェードです。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "16 進数形式（#RRGGBB）のコントゥア顔料カラーです。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "コントゥア顔料の強度です。値が高いほど、深いシャドウになります。"
                }
              }
            }
          }
        },
        "example": {
          "category": "contour",
          "pattern": {
            "name": "OvalFace6"
          },
          "palettes": [
            {
              "color": "#8a5b3e",
              "colorIntensity": 55
            }
          ]
        }
      },
      "EyebrowsEffect": {
        "type": "object",
        "description": "カスタマイズ可能なジオメトリとカラーパレットを使用して、眉毛の形と色を整えます。`pattern.type = shape` の場合、パターンは眉毛のジオメトリ（アーチ、カーブ、厚み）を定義します。`pattern.type = color` の場合、顔料の変更のみが適用されます。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "eyebrows"
            ],
            "description": "このエフェクトが眉毛スタイリングエフェクトであることを識別します。常に \"eyebrows\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "description": "この設定は、眉毛パターンモードを定義し、形状の調整または色のみの適用のいずれかを行います。必要に応じて、パターン名は eyebrows.json のラベルと一致する必要があります。",
            "required": [
              "type"
            ],
            "oneOf": [
              {
                "title": "ShapePattern",
                "description": "形状ベースの眉毛スタイリング（ジオメトリ + オプションの色）。",
                "required": [
                  "name"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "shape"
                    ],
                    "description": "カスタマイズされた眉毛パターン形状を使用"
                  },
                  "name": {
                    "type": "string",
                    "description": "眉毛形状パターンの名前です。eyebrows.json の `label` と一致する必要があります。",
                    "example": "SoftArch1"
                  },
                  "curvature": {
                    "type": "integer",
                    "minimum": -100,
                    "maximum": 100,
                    "description": "眉の曲がりを調整します。負の値 = より平ら/真っ直ぐ、正の値 = より曲がります。"
                  },
                  "thickness": {
                    "type": "integer",
                    "minimum": -100,
                    "maximum": 100,
                    "description": "検出された眉に対する眉の太さの調整を制御します。正の値 = より太く、負の値 = より細くなります。"
                  },
                  "definition": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100,
                    "description": "眉のシャープさと明瞭さ。値を高くすると、よりクリーンな見た目にするために眉のエッジの輪郭が強調されます。"
                  }
                }
              },
              {
                "title": "ColorPattern",
                "description": "色のみによる眉スタイル（形状変更なし）。",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "color"
                    ],
                    "description": "ユーザーの元の眉の形状を使用します"
                  }
                }
              }
            ]
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "眉の色パレット。各パレットは、ピグメントとオプションのシマー効果（シマーテクスチャのみ）を制御します。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "colorIntensity",
                "texture"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "#RRGGBB 形式の眉ピグメントカラー。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "眉の色を適用する際に使用されるピグメント強度。"
                },
                "texture": {
                  "type": "string",
                  "enum": [
                    "matte",
                    "shimmer"
                  ],
                  "description": "眉ピグメントのテクスチャスタイル。シマーは眉の毛に反射ハイライトを追加します。"
                },
                "shimmerColor": {
                  "type": "string",
                  "description": "texture = shimmer の場合に適用されるシマーカラー。"
                },
                "shimmerIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマーの輝きの強さ。texture = shimmer の場合のみ必須です。"
                },
                "shimmerSize": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマーパーティクルのサイズ。シマーテクスチャの場合に必須です。"
                },
                "shimmerDensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "眉内のシマーパーティクルの密度。シマーテクスチャの場合に必須です。"
                }
              }
            }
          }
        },
        "example": {
          "category": "eyebrows",
          "pattern": {
            "type": "shape",
            "name": "SoftArch1",
            "curvature": 10,
            "thickness": 5,
            "definition": 50
          },
          "palettes": [
            {
              "color": "#3b2f2f",
              "colorIntensity": 70,
              "texture": "matte"
            }
          ]
        }
      },
      "EyelinerEffect": {
        "type": "object",
        "description": "カスタマイズ可能なパターンとピグメント設定を使用してアイライナーを適用します。パターンはアイライナーのレイアウト（例：アラブ風形状、ウィングスタイル）を定義し、パレットは色、テクスチャ、シマー/メタリック効果、強度を指定します。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "eye_liner"
            ],
            "description": "この効果をアイライナー効果として識別します。常に \"eye_liner\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "required": [
              "name"
            ],
            "description": "アイライナーの形状と配置を定義します。パターン名は eyeliner.json のラベルと一致する必要があります。",
            "properties": {
              "name": {
                "type": "string",
                "description": "アイライナーパターンの名前。eyeliner.json のラベルと等しい必要があります。",
                "example": "Arabic3"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "アイライナーカラーパレットエントリ。各パレットは、ピグメントカラー、シマー/メタリック効果、全体的な強度を制御します。選択したアイライナーパターンが複数の色を必要とする場合、より多くのパレットが使用されます。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "texture",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "#RRGGBB 形式のアイライナーピグメントカラー。"
                },
                "texture": {
                  "type": "string",
                  "enum": [
                    "matte",
                    "shimmer",
                    "metallic"
                  ],
                  "description": "アイライナーのテクスチャ仕上げは、フラットで不透明な効果のマット、輝く反射仕上げのシマー（シマーフィールド付き）、または光沢のあるメタリック光沢のメタリック（シマーフィールドとメタリック強度が必要）など、ライナーの外観を指定します。"
                },
                "shimmerColor": {
                  "type": "string",
                  "description": "シマーまたはメタリック反射パーティクルに使用される色。texture が shimmer または metallic の場合に必須です。"
                },
                "shimmerIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "反射スパークルの強さ。texture が shimmer または metallic の場合に必須です。"
                },
                "metallicIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "メタリック反射レベル。texture = metallic の場合に必須です。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "アイライナーカラーのピグメント強度。"
                }
              }
            }
          }
        },
        "example": {
          "category": "eye_liner",
          "pattern": {
            "name": "Arabic3"
          },
          "palettes": [
            {
              "color": "#000000",
              "texture": "matte",
              "colorIntensity": 80
            }
          ]
        }
      },
      "EyeshadowEffect": {
        "type": "object",
        "description": "カスタマイズ可能なマルチカラーパレットとテクスチャを使用してアイシャドウを適用します。アイシャドウパターンはレイアウト（例：1〜5色）を定義し、パレットはピグメントとシマー/メタリック特性を指定します。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "eye_shadow"
            ],
            "description": "この効果をアイシャドウ効果として識別します。常に \"eye_shadow\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "required": [
              "name"
            ],
            "description": "アイシャドウの配置パターンを定義します。eyeshadow.json の `label`（例：1color1、2colors1 など）と一致する必要があります。",
            "properties": {
              "name": {
                "type": "string",
                "description": "eyeshadow.json のパターン名。色数とシャドウ配置ゾーンを決定します。",
                "example": "2colors1"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "1つ以上のピグメントパレットエントリ。必要なパレット数は、パターンの `colorNum` に依存します。各パレットは、アイシャドウパターン内の特定のレイヤー/色を定義します。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "texture",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "HEX 形式（#RRGGBB）のアイシャドウピグメントカラー。"
                },
                "texture": {
                  "type": "string",
                  "enum": [
                    "matte",
                    "shimmer",
                    "metallic"
                  ],
                  "description": "アイシャドウの表面外観は、滑らかでフラットな見た目のマット、輝く効果のシマー（シマーパラメータが必要）、または大胆なメタリック光沢のメタリック（シマーパラメータとメタリック強度が必要）などの仕上げを決定します。"
                },
                "shimmerColor": {
                  "type": "string",
                  "description": "シマーパーティクルの色。texture = shimmer または metallic の場合に必須です。"
                },
                "shimmerIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマーまたはメタリックテクスチャの反射スパークルの強さ。"
                },
                "metallicIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "メタリック反射レベル。メタリックテクスチャの場合に必須です。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "各シャドウカラーの全体的なピグメントレベル。"
                }
              }
            }
          }
        },
        "example": {
          "category": "eye_shadow",
          "pattern": {
            "name": "2colors1"
          },
          "palettes": [
            {
              "color": "#b07baf",
              "texture": "shimmer",
              "shimmerColor": "#f2d3f5",
              "shimmerIntensity": 60,
              "colorIntensity": 70
            },
            {
              "color": "#8e5c9c",
              "texture": "matte",
              "colorIntensity": 65
            }
          ]
        }
      },
      "EyelashesEffect": {
        "type": "object",
        "description": "検出されたまつ毛のストランドにピグメントを適用してまつ毛を強調します。まつ毛エクステンションや密度の強化は、選択したパターンに依存し、パレットはまつ毛の色と強度を制御します。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "eyelashes"
            ],
            "description": "この効果をまつ毛効果として識別します。常に \"eyelashes\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "required": [
              "name"
            ],
            "description": "適用されるまつ毛スタイル（ナチュラル、アーティスティック、ウィング、上/下など）を定義します。eyelashes.json の `label` と一致する必要があります。",
            "properties": {
              "name": {
                "type": "string",
                "description": "eyelashes.json のまつ毛パターンの名前。",
                "example": "Upper1"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "まつげの色パレット。まつげはシマー/メタリック効果には対応していません。色と強度のみをサポートします。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "HEX 形式（#RRGGBB）のまつげの色。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "まつげに適用される暗さ/色素の強さ。"
                }
              }
            }
          }
        },
        "example": {
          "category": "eyelashes",
          "pattern": {
            "name": "Upper1"
          },
          "palettes": [
            {
              "color": "#000000",
              "colorIntensity": 80
            }
          ]
        }
      },
      "FoundationEffect": {
        "type": "object",
        "description": "色素、カバー力、輝きのコントロールを使用して、肌色を均一にするファンデーションを適用します。チーク/コントゥアリングとは異なり、ファンデーションにはパターンがありません。肌セグメンテーションに基づいてグローバルに適用されます。",
        "required": [
          "category",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "foundation"
            ],
            "description": "この効果をファンデーション効果として識別します。常に \"foundation\" である必要があります。"
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "トーン、カバー力、輝き、色の強度を制御するファンデーションパレットのエントリ。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "colorIntensity",
                "glowIntensity",
                "coverageIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "#RRGGBB 形式のファンデーションシェード。通常、自然な肌色に近い色です。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "ファンデーション着色の強度。"
                },
                "glowIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "肌の仕上げに輝きを加えます。値が高いほど、輝くまたは濡れたような効果が生まれます。"
                },
                "coverageIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "ファンデーションカバーの不透明度を制御します。値が高いほど、より多くの欠点を隠します。"
                }
              }
            }
          }
        },
        "example": {
          "category": "foundation",
          "palettes": [
            {
              "color": "#eac595",
              "colorIntensity": 50,
              "glowIntensity": 10,
              "coverageIntensity": 50
            }
          ]
        }
      },
      "HighlighterEffect": {
        "type": "object",
        "description": "顔の高い部分（頬骨、唇の山、鼻筋など）に反射的なハイライトを追加します。パターンは顔の形に基づいてハイライトの配置を決定します。パレットはシマー、輝き、密度、粒子サイズ、着色を制御します。",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "highlighter"
            ],
            "description": "この効果をハイライター効果として識別します。常に \"highlighter\" である必要があります。"
          },
          "pattern": {
            "type": "object",
            "required": [
              "name"
            ],
            "description": "ハイライト配置パターン。highlighter.json の `label` と一致する必要があります（例：HeartFace4, Oblong11, OvalFace2）。",
            "properties": {
              "name": {
                "type": "string",
                "description": "highlighter.json カタログからのハイライトパターンの名前。",
                "example": "SquareFace3"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "シマー、輝き、密度、色を定義するハイライターパレットのエントリ。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "glowIntensity",
                "shimmerIntensity",
                "shimmerDensity",
                "shimmerSize",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "#RRGGBB HEX 形式のハイライター色素の色。通常、白、シャンパン、ゴールド、ピンク系のトーンです。"
                },
                "glowIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "肌に追加される非シマーの輝きの量。値が高いほど、より輝く、放射状の仕上げになります。"
                },
                "shimmerIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマー反射の強さ。値が高いほど、よりキラキラします。"
                },
                "shimmerDensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "面積あたりのシマー粒子の数。密度が高いほど、よりグリッターのような効果が生まれます。"
                },
                "shimmerSize": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマー粒子のサイズ。粒子が大きいほどグリッターのような効果が生まれ、小さいほど細かいシマーになります。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "ハイライター色素の強さ。"
                }
              }
            }
          }
        },
        "example": {
          "category": "highlighter",
          "pattern": {
            "name": "SquareFace3"
          },
          "palettes": [
            {
              "color": "#FFF7F8",
              "glowIntensity": 60,
              "shimmerIntensity": 50,
              "shimmerDensity": 40,
              "shimmerSize": 50,
              "colorIntensity": 50
            }
          ]
        }
      },
      "LipColorEffect": {
        "type": "object",
        "description": "さまざまな形状、仕上げ、アートスタイルでリップスティックを適用します。唇の形態（ふっくら感、しわ）、質感（マット、グロス、メタリック、シマー、シアーなど）、シマー/グロスパラメータ、マルチカラーパターン、オンブレ/ツートーンスタイルの制御を含みます。",
        "required": [
          "category",
          "shape",
          "palettes",
          "style"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "lip_color"
            ],
            "description": "この効果をリップスティック/リップカラー効果として識別します。常に \"lip_color\" である必要があります。"
          },
          "shape": {
            "type": "object",
            "description": "唇の境界と形状変更を定義します。パターン名は lipshape.json と一致する必要があります（例：plump, original, pouty）。",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "唇の縁とシルエットを変更するために使用されるリップシェイプスタイル。lipshape.json の `label` と等しくなければなりません。",
                "example": "plump"
              }
            }
          },
          "morphology": {
            "type": "object",
            "description": "唇へのオプションの形態調整。ふっくら感を高め、唇のしわを減らします。",
            "properties": {
              "fullness": {
                "type": "integer",
                "default": 0,
                "minimum": 0,
                "maximum": 100,
                "description": "唇がどれだけふっくら見えるかを制御します。値が高いほど、より大きく、ボリュームのある唇になります。"
              },
              "wrinkless": {
                "type": "integer",
                "default": 0,
                "minimum": 0,
                "maximum": 100,
                "description": "唇のしわと質感を滑らかにします。値が高いほど、より滑らかな唇の外観になります。"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "色素、質感、シマー、グロスを制御するリップカラーパレットのエントリ。オンブレまたはツートーンスタイルのために複数のパレットを使用できます。",
            "items": {
              "type": "object",
              "required": [
                "color",
                "texture",
                "colorIntensity"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "HEX 形式（#RRGGBB）のリップスティックの色。"
                },
                "texture": {
                  "type": "string",
                  "enum": [
                    "matte",
                    "gloss",
                    "holographic",
                    "metallic",
                    "satin",
                    "sheer",
                    "shimmer"
                  ],
                  "description": "この設定はリップ仕上げの質感を示します。グロスを選択した場合は、グロスプロパティを含めてください。シマー、メタリック、ホログラフィック仕上げの場合は、シマー関連のフィールドを追加してください。シアー、シマー、グロスの場合は、透明度強度を含めることを忘れないでください。"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "リップスティック色素の強度。"
                },
                "gloss": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "グロス/ホログラフィック/メタリック/シアー/シマー質感の光沢レベル。"
                },
                "shimmerColor": {
                  "type": "string",
                  "description": "シマー、メタリック、ホログラフィック質感のシマー粒子の色。"
                },
                "shimmerIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマー反射の強さ。"
                },
                "shimmerDensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマー粒子の密度。"
                },
                "shimmerSize": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "シマー粒子のサイズ。"
                },
                "transparencyIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "透明度効果の強さ。シアー、シマー、グロスの質感に使用されます。"
                }
              }
            }
          },
          "style": {
            "type": "object",
            "description": "スタイルは、均一なシェード、トーンをブレンドするオンブレグラデーション、唇の異なる部分にコントラストのある色を使ったツートーン効果など、リップカラーのアートルックを記述します。",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "full",
                  "ombre",
                  "twoTone"
                ],
                "description": "リップカラーのスタイル。"
              },
              "innerColorRatio": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "セカンダリーカラーが内側にどこまで広がるかを決定します（オンブレのみ）。type = ombre の場合は必須です。\n"
              },
              "blendStrength": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "色間のブレンドの柔らかさ。type = ombre の場合は必須です。\n"
              }
            }
          }
        },
        "example": {
          "category": "lip_color",
          "shape": {
            "name": "plump"
          },
          "morphology": {
            "fullness": 20,
            "wrinkless": 10
          },
          "style": {
            "type": "full"
          },
          "palettes": [
            {
              "color": "#C2185B",
              "texture": "gloss",
              "colorIntensity": 80,
              "gloss": 70,
              "transparencyIntensity": 30
            }
          ]
        }
      },
      "LipLinerEffect": {
        "type": "object",
        "description": "唇の輪郭にリップライナーを適用し、形状の輪郭を強調します。唇の境界の調整、対称性の調整、オンブレ/2トーンルックのサポートに有用です。\n",
        "required": [
          "category",
          "pattern",
          "palettes"
        ],
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "lip_liner"
            ],
            "description": "このエフェクトがリップライナーエフェクトであることを識別します。常に \"lip_liner\" である必要があります。\n"
          },
          "pattern": {
            "type": "object",
            "required": [
              "name"
            ],
            "description": "lipliner.json のパターンに基づいてリップライナーの配置を定義します。\n",
            "properties": {
              "name": {
                "type": "string",
                "description": "リップライナーパターンの名前（例：Natural1, LargerUpper1）。\n",
                "example": "Natural1"
              }
            }
          },
          "palettes": {
            "type": "array",
            "minItems": 1,
            "description": "色、太さ、滑らかさを定義するリップライナーパレットエントリ。\n",
            "items": {
              "type": "object",
              "required": [
                "color",
                "texture",
                "colorIntensity",
                "thickness",
                "smoothness"
              ],
              "properties": {
                "color": {
                  "type": "string",
                  "description": "HEX 形式のリップライナーピグメントカラー。\n"
                },
                "texture": {
                  "type": "string",
                  "enum": [
                    "matte",
                    "satin"
                  ],
                  "description": "リップライナーの仕上げタイプ。\n"
                },
                "colorIntensity": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "リップライナーの発色強度。\n"
                },
                "thickness": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "リップライナーストロークの太さ — 値が大きいほど輪郭が太くなります。\n"
                },
                "smoothness": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "ストロークエッジの滑らかさ。値が大きいほど、柔らかくブレンドされたラインになります。\n"
                }
              }
            }
          }
        },
        "example": {
          "category": "lip_liner",
          "pattern": {
            "name": "Natural1"
          },
          "palettes": [
            {
              "color": "#A63A50",
              "texture": "matte",
              "colorIntensity": 70,
              "thickness": 40,
              "smoothness": 50
            }
          ]
        }
      }
    },
    "responses": {
      "InvalidParameters": {
        "description": "無効なリクエストパラメータ",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "integer",
                  "example": 400,
                  "description": "レスポンスステータス"
                },
                "error": {
                  "type": "string",
                  "description": "エラーメッセージ",
                  "example": "The operation could not be completed"
                },
                "error_code": {
                  "type": "string",
                  "enum": [
                    "InvalidParameters"
                  ]
                }
              }
            }
          }
        }
      },
      "InvalidApiKey": {
        "description": "無効な API キー、非アクティブな API キー、または期限切れの API キー",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "integer",
                  "example": 401,
                  "description": "レスポンスステータス"
                },
                "error_code": {
                  "type": "string",
                  "enum": [
                    "InvalidApiKey",
                    "InactiveApiKey",
                    "ExpiredApiKey"
                  ]
                }
              }
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "一定時間内にリクエストが多すぎます"
      },
      "RunError": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "description": "レスポンスステータス",
            "example": 400
          },
          "error": {
            "type": "string",
            "description": "エラーメッセージ",
            "example": "The operation could not be completed"
          },
          "error_code": {
            "type": "string",
            "enum": [
              "CreditInsufficiency",
              "InvalidStyleGroup",
              "InvalidStyle",
              "BadRequest",
              "InvalidParameters"
            ]
          }
        }
      },
      "TaskTimeout": {
        "description": "タスクが期待される時間内にレスポンスがありません",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "integer",
                  "description": "レスポンスステータス",
                  "example": 500
                },
                "error_code": {
                  "type": "string",
                  "enum": [
                    "TaskTimeout"
                  ]
                }
              }
            }
          }
        }
      },
      "InvalidTaskId": {
        "description": "無効なタスク ID",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "integer",
                  "description": "レスポンスステータス",
                  "example": 400
                },
                "error_code": {
                  "type": "string",
                  "enum": [
                    "InvalidTaskId"
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}