> ## Documentation Index
> Fetch the complete documentation index at: https://adcp-docs-ja.pier1.co.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# アーティファクト

> AdCP のアーティファクトは広告掲載面に隣接するコンテンツコンテキストを表し、生コンテンツをパブリッシャー外に出すことなくブランド適合性評価を可能にします。

# Artifacts

**アーティファクト** は広告掲載面に隣接するコンテンツの単位です。ブランドセーフティ/適合性の評価とは「このアーティファクトは自社広告に適切か？」を問うことです。

## アーティファクトとは

アーティファクトは広告表示コンテキストを表します:

* ウェブサイト上の **ニュース記事**
* 広告ブレーク間の **ポッドキャストセグメント**
* YouTube 動画内の **動画チャプター**
* フィード内の **ソーシャルメディア投稿**
* CTV 番組の **シーン**
* チャット会話内の **AI 生成画像**

アーティファクトは `property_id` + `artifact_id` で識別します。property がコンテンツの所在地を、artifact\_id がそのコンテンツ固有の識別子を表します。artifact\_id の形式は柔軟で、URL パスやプラットフォーム固有 ID、内部で一貫して使う任意の ID で構いません。

## 構造

**Schema**: [artifact.json](https://adcontextprotocol.org/schemas/v3/content-standards/artifact.json)

```json theme={null}
{
  "property_id": {"type": "domain", "value": "reddit.com"},
  "artifact_id": "r_fitness_post_abc123",
  "assets": [
    {"type": "text", "role": "title", "content": "Best protein sources for muscle building", "language": "en"},
    {"type": "text", "role": "paragraph", "content": "Looking for recommendations on high-quality protein sources...", "language": "en"},
    {"type": "image", "url": "https://cdn.reddit.com/fitness-image.jpg", "alt_text": "Person lifting weights"}
  ]
}
```

### 必須フィールド

| Field         | Description                                                         |
| ------------- | ------------------------------------------------------------------- |
| `property_id` | このアーティファクトの所在。標準の識別子型（`domain`, `app_id`, `apple_podcast_id` など）を使用 |
| `artifact_id` | プロパティ内で一意の識別子。形式はプロパティ所有者が定義                                        |
| `assets`      | ドキュメント順のコンテンツ（テキスト、画像、動画、音声など）                                      |

### 任意フィールド

| Field              | Description                          |
| ------------------ | ------------------------------------ |
| `variant_id`       | 特定のバリアント（A/B テスト、翻訳、時間差バージョン）を識別     |
| `format_id`        | フォーマットレジストリ参照（クリエイティブの format と同様）   |
| `url`              | アーティファクトの Web URL がある場合              |
| `metadata`         | アーティファクト単位のメタデータ（OGP、JSON-LD、著者情報など） |
| `published_time`   | 公開日時                                 |
| `last_update_time` | 最終更新日時                               |

## バリアント

同一アーティファクトに複数バリアントが存在する場合があります:

* **Translations** - 英語版 vs スペイン語版
* **A/B tests** - テスト中の異なるヘッドライン
* **Temporal versions** - 水曜日に変更されたコンテンツ

`variant_id` で区別します:

```json theme={null}
// English version
{
  "property_id": {"type": "domain", "value": "nytimes.com"},
  "artifact_id": "article_12345",
  "variant_id": "en",
  "assets": [
    {"type": "text", "role": "title", "content": "Breaking News Story", "language": "en"}
  ]
}

// Spanish translation
{
  "property_id": {"type": "domain", "value": "nytimes.com"},
  "artifact_id": "article_12345",
  "variant_id": "es",
  "assets": [
    {"type": "text", "role": "title", "content": "Noticia de última hora", "language": "es"}
  ]
}

// A/B test variant
{
  "property_id": {"type": "domain", "value": "nytimes.com"},
  "artifact_id": "article_12345",
  "variant_id": "headline_test_b",
  "assets": [
    {"type": "text", "role": "title", "content": "Alternative Headline Being Tested", "language": "en"}
  ]
}
```

`artifact_id` と `variant_id` の組み合わせはプロパティ内で一意としてください。どのバリアントが配信されたかをレポートと突き合わせられます。

## アセットタイプ

アセットはアーティファクト内の実コンテンツです。タイトル、本文、画像、動画などすべてアセットとして表現します。

### Text

```json theme={null}
{"type": "text", "role": "title", "content": "Article Title", "language": "en"}
{"type": "text", "role": "paragraph", "content": "The article body text...", "language": "en"}
{"type": "text", "role": "description", "content": "A summary of the article", "language": "en"}
{"type": "text", "role": "heading", "content": "Section Header", "heading_level": 2}
{"type": "text", "role": "quote", "content": "A quoted statement"}
```

Roles: `title`, `description`, `paragraph`, `heading`, `caption`, `quote`, `list_item`

各テキストアセットは混在言語コンテンツのために独自の `language` タグを持てます。

### 画像 (Image)

```json theme={null}
{
  "type": "image",
  "url": "https://cdn.example.com/photo.jpg",
  "alt_text": "Description of the image"
}
```

### 動画 (Video)

```json theme={null}
{
  "type": "video",
  "url": "https://cdn.example.com/video.mp4",
  "transcript": "Full transcript of the video content...",
  "duration_ms": 180000
}
```

### 音声 (Audio)

```json theme={null}
{
  "type": "audio",
  "url": "https://cdn.example.com/podcast.mp3",
  "transcript": "Today we're discussing...",
  "duration_ms": 3600000
}
```

## メタデータ

アーティファクト全体を表すメタデータです。個別アセットではありません:

```json theme={null}
{
  "metadata": {
    "author": "Jane Smith",
    "canonical": "https://example.com/article/12345",
    "open_graph": {
      "og:type": "article",
      "og:site_name": "Example News"
    },
    "json_ld": [
      {
        "@type": "NewsArticle",
        "datePublished": "2025-01-15"
      }
    ]
  }
}
```

これはコンテンツ自体ではなくアーティファクトコンテナに関する情報のため、アセットとは分離しています。

## セキュアなアセットアクセス

AI 生成画像、プライベート会話、有料コンテンツなど公開されないアセットが多数あります。アーティファクトスキーマは認証付きアクセスをサポートします。

### 事前設定（推奨）

継続的な提携では、リクエストごとではなくオンボーディング時にアクセス設定を行います:

1. **サービスアカウント共有** - クラウドストレージへの検証エージェントアクセスを付与
2. **OAuth クライアント認証情報** - マシン間認証をセットアップ
3. **API キー交換** - セットアップ時に長期 API キーを共有

これはバイヤーからコンテンツスタンダードを初めて受け取ったセラーのアクティベーションフェーズで行います。

### アセット単位の認証

事前設定ができない場合は、アセットごとに認証情報を含めます:

```json theme={null}
{
  "type": "image",
  "url": "https://cdn.openai.com/secured/img_abc123.png",
  "access": {
    "method": "bearer_token",
    "token": "eyJhbGciOiJIUzI1NiIs..."
  }
}
```

**トークンサイズについての注意**: 多数のアセットを持つアーティファクトでは、アセット単位のトークンによってペイロードサイズが大幅に増加する場合があります。以下の方法を検討してください:

1. **事前設定アクセス** - オンボーディング時にサービスアカウントアクセスを一度設定
2. **共有トークン参照** - アーティファクトレベルでトークンを定義し ID で参照
3. **署名付き URL** - URL 自体が認証情報となる事前署名 URL を使用

`url` フィールドはアクセス URL で、アーティファクトの正規/公開 URL とは異なる場合があります。例えば `https://news.example.com/article/123` として公開された記事が `https://cdn.example.com/secured/...` からアセット提供される場合があります。

### Access Methods

| Method            | Use Case                                                                |
| ----------------- | ----------------------------------------------------------------------- |
| `bearer_token`    | OAuth2 bearer token in Authorization header                             |
| `service_account` | GCP/AWS service account credentials                                     |
| `signed_url`      | Pre-signed URL with embedded credentials (URL itself is the credential) |

### Service Account Setup

For GCP:

```json theme={null}
{
  "access": {
    "method": "service_account",
    "provider": "gcp",
    "credentials": {
      "type": "service_account",
      "project_id": "my-project",
      "private_key_id": "...",
      "private_key": "-----BEGIN PRIVATE KEY-----\n...",
      "client_email": "verification-agent@my-project.iam.gserviceaccount.com"
    }
  }
}
```

For AWS:

```json theme={null}
{
  "access": {
    "method": "service_account",
    "provider": "aws",
    "credentials": {
      "access_key_id": "AKIAIOSFODNN7EXAMPLE",
      "secret_access_key": "...",
      "region": "us-east-1"
    }
  }
}
```

### Pre-Signed URLs

認証情報を共有せずに一時的なアクセスを行う場合:

```json theme={null}
{
  "type": "video",
  "url": "https://storage.googleapis.com/bucket/video.mp4?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=...&X-Goog-Signature=...",
  "access": {
    "method": "signed_url"
  }
}
```

URL 自体に認証情報が含まれているため、追加認証は不要です。

## Property Identifier Types

`property_id` は AdCP プロパティスキーマの標準識別子型を使用します:

| Type                 | Example                                 | Use Case         |
| -------------------- | --------------------------------------- | ---------------- |
| `domain`             | `reddit.com`                            | Websites         |
| `app_id`             | `com.spotify.music`                     | Mobile apps      |
| `apple_podcast_id`   | `1234567890`                            | Apple Podcasts   |
| `spotify_show_id`    | `4rOoJ6Egrf8K2IrywzwOMk`                | Spotify podcasts |
| `youtube_channel_id` | `UCddiUEpeqJcYeBxX1IVBKvQ`              | YouTube channels |
| `rss_url`            | `https://feeds.example.com/podcast.xml` | RSS feeds        |

## Artifact ID Schemes

プロパティ所有者が artifact\_id の形式を定義します。例:

| Property Type | Artifact ID Pattern                         | Example                  |
| ------------- | ------------------------------------------- | ------------------------ |
| News website  | `article_{id}`                              | `article_12345`          |
| Reddit        | `r_{subreddit}_{post_id}`                   | `r_fitness_abc123`       |
| Podcast       | `episode_{num}_segment_{num}`               | `episode_42_segment_2`   |
| CTV           | `show_{id}_s{season}e{episode}_scene_{num}` | `show_abc_s3e5_scene_12` |
| Social feed   | `post_{id}`                                 | `post_xyz789`            |

検証エージェントはこの形式を解釈する必要はなく、不透明なものとして扱います。プロパティ所有者は自社コンテンツとの突き合わせに使います。

## Related

* [Content Standards Overview](.) - アーティファクトがコンテンツスタンダードワークフローに占める役割
* [calibrate\_content](./tasks/calibrate_content) - キャリブレーション用アーティファクトの送付
