
# サポートアーティファクトをアップロード

`POST /v1/support-artifacts` · 権限 `support-artifacts:write`

HAR ファイルまたはログをサポートチケットに添付します。アーティファクトはダッシュボードのサポートページからのみアップロードできます。API キーとマシンクライアントは `403 insufficient_permissions` を受け取ります。ダッシュボードはアップロード前にブラウザ内でシークレットを削除し、サーバーはアーティファクトを再度スキャンします。`Cookie`、`Set-Cookie`、`Authorization`、`DPoP` ヘッダー、OAuth、OIDC、SAML のトークンフィールド、`__Host-` Cookie、JWT、KeenAuth のプレフィックスを持つシークレットは `[redacted]` に置き換えられます。アーティファクト内で見つかった管理 API キー (`idp_sk_`、`idp_rk_`) は直ちに失効されます。失効に失敗した場合は何も保存されず、アップロードは `503` を返します。保存されるのはクリーンアップ後の内容のみで、環境のデータキーで暗号化され、30 日後に削除されます。レスポンスには内容や削除された値は決して含まれません。

## リクエスト

| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
| `ticket_ref` | query | はい | サポートチケットの参照: 1-64 文字、英字・数字・`_ . : -`、英字または数字で始まる。 |
| `kind` | query | はい | `har` (HAR 1.2 JSON ドキュメント) または `log` (プレーンテキスト)。 |
| `Content-Type` | header | はい | `application/octet-stream`。 |
| `Content-Encoding` | header | いいえ | 圧縮されたアーティファクトを送る場合は `gzip`。 |
| `Idempotency-Key` | header | いいえ | 任意。16-64 文字の `[A-Za-z0-9_-]`。同じキーを同じボディで繰り返すと、同じアーティファクトを返します。 |

ボディはアーティファクトそのものです。非圧縮で最大 50 MB です。ワイヤー上のリクエストボディは 11 MiB に制限されているため、大きなアーティファクトは gzip で圧縮してください。1 つのチケットに保存できるアーティファクトは最大 10 個です。

## レスポンス

保存されたアーティファクトとともに `201 Created`。`findings` は種類ごとに削除された値の数を示します。`revocations_triggered` は、アーティファクトに含まれていたために失効された認証情報の数です。

```json
{
  "id": "sart_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "ticket_ref": "SUP-48213",
  "kind": "har",
  "size_bytes": 482113,
  "sha256": "9f2b5c7d1e3a4f60718293a4b5c6d7e8f90123456789abcdef0123456789abcd",
  "findings": {"authorization": 2, "cookie": 5, "host_cookie": 3, "oauth_param": 1},
  "revocations_triggered": 0,
  "created_at": "2026-11-10T09:30:00.123456Z",
  "expires_at": "2026-12-10T09:30:00.123456Z"
}
```

## エラー

| HTTP | コード | 概要 |
|---|---|---|
| 400 | `malformed_request` | ボディを読み取れない、gzip ストリームが不正、または `Idempotency-Key` の形式が不正です。 |
| 401 | `unauthenticated` | 認証情報がないか、無効または失効しています。 |
| 403 | `insufficient_permissions` | リクエストがダッシュボードから行われていないか、ダッシュボードのロールに `support-artifacts:write` がありません。 |
| 403 | `quota_exceeded` | チケットにすでに 10 個のアーティファクトがあります。 |
| 413 | `payload_too_large` | アーティファクトが 50 MB を超えているか、リクエストボディが 11 MiB を超えています。 |
| 415 | `unsupported_media_type` | `Content-Type` が `application/octet-stream` ではないか、コンテンツエンコーディングが `gzip` ではありません。 |
| 422 | `validation_failed` | `ticket_ref` または `kind` が欠けているか無効、ボディが空、または `har` アーティファクトが HAR ドキュメントではありません (`/body` `invalid_har`)。 |
| 422 | `idempotency_key_reuse` | `Idempotency-Key` は別のボディですでに使用されています。 |
| 429 | `rate_limited` | 処理中のアップロードが多すぎるか、レート制限を超えました。`Retry-After` の時間が過ぎてから再試行してください。 |
| 503 | `service_unavailable` | アーティファクトは保存されませんでした (認証情報を失効できないか、ストレージが利用できません)。`Retry-After` の時間が過ぎてから再試行してください。 |

## 例

アップロードはダッシュボードの操作です。ダッシュボードが送信するリクエスト:

```http
POST /v1/support-artifacts?ticket_ref=SUP-48213&kind=har
Content-Type: application/octet-stream
Content-Encoding: gzip
Idempotency-Key: 2f1c9a7e-5b3d-4e8f-9a6c-1d2e3f4a5b6c

<gzip 圧縮 HAR ファイル>
```
