> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# アプリケーションフロー

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = localizeLink(href);
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

一般的に、アプリケーションでは以下のようにサービス利用規約を使用します。

ユーザーとして認証されたアプリケーションが、関連するサービス利用規約にユーザーが同意している必要があるBox内の項目にアクセスしようとすると、`TERMS_OF_SERVICE_REQUIRED`エラーが返されます。

```json theme={null}
{
  "type": "error",
  "status": 400,
  "code": "terms_of_service_required",
  "context_info": {
    "tos_id": 261346614,
    "tos_user_status_id": 4562456
  },
  "help_url": "/guides/api-calls/permissions-and-errors/common-errors/",
  "message": "User must accept custom terms of service before action can be taken",
  "request_id": "ADF7722DD"
}
```

アプリケーションは、<Link href="/reference/get-terms-of-services-id">`GET /terms_of_services/:id`</Link>を呼び出してサービス利用規約の情報をリクエストします。

```json theme={null}
{
  "id": 261346614,
  "type": "terms_of_service",
  "status": "enabled",
  "enterprise": {
    "id": 11446498,
    "type": "enterprise",
    "name": "Acme Inc."
  },
  "tos_type": "managed",
  "text": "By using this service, you agree to ...",
  "created_at": "2012-12-12T10:53:43-08:00",
  "modified_at": "2012-12-12T10:53:43-08:00"
}
```

その後、アプリケーションはサービス利用規約のテキストをユーザーに表示できます。

ユーザーが利用規約を同意または拒否すると、最初のエラーによってレスポンスで`tos_user_status_id`が返されたかどうかに応じて、<Link href="/reference/put-terms-of-service-user-statuses-id">`PUT /terms_of_service_user_statuses/:id`</Link>または<Link href="/reference/post-terms-of-service-user-statuses">`POST /terms_of_service_user_statuses`</Link>が呼び出されます。

## サーバー認証とユーザー代理操作

JWT、クライアント資格情報許可 (CCG)、またはOAuth 2.0を使用するアプリケーションは、<Link href="/platform/user-types/#service-account">サービスアカウント</Link>、<Link href="/platform/user-types/#app-user">App User</Link>、または管理対象ユーザーとして動作することができます。サービス利用規約の適用は、APIリクエストのコンテキスト上のユーザーによって異なります。

| シナリオ                                                                                              | 管理対象ユーザー用サービス利用規約未承認の場合にブロックされるか             |
| ------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| サービスアカウントまたはApp UserのトークンでAPIを呼び出す (`As-User`なし)                                                  | **いいえ** — ヘッドレスユーザーは対象外                      |
| CCG/JWTと<Link href="/guides/authentication/oauth2/as-user">`As-User`</Link>で管理対象ユーザーを指定してAPIを呼び出す | **はい** — `As-User`ヘッダーで指定したユーザーが同意済みである必要がある |
| 管理対象ユーザー向けのユーザーアクセストークンを発行する                                                                      | **はい** — サービス利用規約に同意するまでトークンは発行されない          |
| 管理対象ユーザー向けのOAuth認可コードフロー                                                                          | **はい** — サービス利用規約に同意するまで承認されない               |
| `As-User`でサービスアカウントまたはApp Userを指定してAPIを呼び出す                                                       | **いいえ** — ヘッドレスユーザーは対象外                      |

### プログラムによるサービス利用規約への同意

管理対象ユーザーが管理対象ユーザー用サービス利用規約に同意していない場合、そのユーザーに代わって行われるほとんどのAPIコールは`terms_of_service_required`を返します。ユーザーにBoxウェブアプリケーションへのサインインを求めずに解決するには、次の手順を実行します。

1. サーバー認証のアクセストークン (JWTまたはCCG) を取得します。
2. <Link href="/guides/authentication/oauth2/as-user">`As-User`</Link>ヘッダーに管理対象ユーザーのIDを設定し、以降のリクエストがそのユーザーのコンテキストで実行されるようにします。
3. サービス利用規約への同意が未完了でも利用できるサービス利用規約のエンドポイントを呼び出します。
   * 規約のテキストを取得する: <Link href="/reference/get-terms-of-services-id">`GET /terms_of_services/:id`</Link>
   * 同意または拒否する: <Link href="/reference/post-terms-of-service-user-statuses">`POST /terms_of_service_user_statuses`</Link>または<Link href="/reference/put-terms-of-service-user-statuses-id">`PUT /terms_of_service_user_statuses/:id`</Link>
4. 元のAPIコールを再試行します。

管理者は、他のユーザーとして動作するための`As-User`ヘッダーを使用せずに、そのユーザーの管理対象ユーザー用サービス利用規約に同意することはできません。同意は、サービス利用規約の対象となるユーザーに対して記録される必要があります。
