# 歯ホワイトニングタスクを実行します。

AI タスクは非同期です。機能ごとに Webhook がサポートされている場合は、Webhook による完了処理を優先します。Webhook エンドポイントを設定し、Webhook 署名を検証したうえで、`success` または `error` の通知が来たら、受け取った `task_id` を使ってタスクの結果を照会します。設定と検証の詳細は [Webhook 統合ガイド](../develop/webhook.md) を参照してください。
Webhook がサポートされていない場合、または統合に使えない場合は、ポーリングを実装します。AI タスクを送信した後、一定の間隔（例：10 秒ごと）でステータスエンドポイントをポーリングし、`success` または `error` になるまで待ちます。

Endpoint: POST /s2s/v2.0/task/teeth-whiten
Security: BearerAuthenticationV2

## Security:

  - `BearerAuthenticationV2` (unknown)
    http bearer

## Request fields (application/json):

  - `version` (string, required)
    Enum: "1.0"

  - `index` (integer)
    エフェクトを適用する対象オブジェクトのゼロベースインデックスです。複数のオブジェクトを含む画像では、まず前処理タスクを実行し、`data.results.result` 内のオブジェクト座標を確認したうえで、選択したオブジェクトのインデックスを指定します。
前処理ステップでは、エフェクトを適用する前に、入力画像を解析して検出できるすべてのオブジェクトを特定します。検出タスクを実行し、バウンディングボックス座標のリストなど、各オブジェクトの構造化データを返します。このリスト内の各エントリの位置がゼロベースインデックスとして機能し、エフェクトの対象オブジェクトを指定するのに使います。
この情報は、一般的に `data.results.result` 配下で構造化された形式で返ります。
このステップを先に実行すると、以下ができます。
* 画像内に存在するオブジェクトの数を把握する
* オブジェクトの位置とサイズを確認する
* インデックスで正しい対象オブジェクトを選択する

複数のオブジェクトを含む画像では、必ず前処理ステップを実行してください。
`data.results.result` を確認して、オブジェクトとそのインデックスを特定してください。
対応するゼロベースインデックスを使って、正しい対象を選択してください。
    Example: 0

  - `effect` (object, required)

  - `effect.whitening_intensity` (integer, required)

  - `effect.skin_smooth_strength` (integer)

  - `effect.skin_smooth_color_intensity` (integer)

  - `src_file_url` (string, required)
    タスクを実行するファイルの URL。この URL は公開されている必要があります。
    Example: https://example.com/selfie.jpg

  - `src_file_id` (string, required)
    タスクを実行するファイルの ID。ファイルアップロード API から取得したファイル ID です。
    Example: pfNK5PuRe0MrwLHcGA3DOmB1ahwfXTbYHjv+KoBIxbE=

## Response 200:

  - `200` (unknown)
    タスクの実行に成功しました

## Response 200 fields (application/json):

  - `status` (integer)
    レスポンスステータス
    Example: 200

  - `data` (object)

  - `data.task_id` (string)
    このタスクの ID。タスクの結果は、この ID を使用して 24 時間以内にクエリできます。
    Example: grH0CvsgXuAIHLUzD0V1Ol34hoet3R1tvdbtiVHrDb6_UqCLKIejAIajwxrhOAfe

## Response 400:

  - `400` (unknown)
    タスクの実行に失敗しました

## Response 400 fields (application/json):

  - `status` (integer)
    レスポンスステータス
    Example: 400

  - `error` (string)
    エラーメッセージ
    Example: The operation could not be completed

  - `error_code` (string)
    エラーコード:
* InvalidParameters - 無効なリクエストパラメータ
* CreditInsufficiency - 実行に必要なユニットが不足しています
* BadRequest - 予期しないリクエストパラメータ
* InvalidStyleGroup - 無効なスタイルグループ ID
* InvalidStyle - 無効なスタイル ID
    Enum: "InvalidParameters", "CreditInsufficiency", "InvalidStyleGroup", "InvalidStyle", "BadRequest"

## Response 401:

  - `401` (unknown)
    無効または欠落している API キー

## Response 401 fields (application/json):

  - `status` (integer)
    レスポンスステータス
    Example: 401

  - `error` (string)
    Example: Invalid API key

## Response 429:

  - `429` (unknown)
    リクエストが多すぎます

## Response 429 fields (application/json):

  - `status` (integer)
    レスポンスステータス
    Example: 429

  - `error` (string)
    Example: Too many requests

