Skip to main content
クリエイティブエージェントがサポートするクリエイティブフォーマットを探索します。アセット要件や技術的制約を含む完全なフォーマット仕様を返します。 応答時間: 約 1 秒(データベース参照) 認証: 不要(フォーマット探索のための公開エンドポイント) Request Schema: /schemas/v3/creative/list-creative-formats-request.json Response Schema: /schemas/v3/creative/list-creative-formats-response.json

エージェントタイプ別の動作

Creative Protocol を実装するどのエージェントも list_creative_formats を提供できます。レスポンスはエージェントが担う役割によって異なります。 専用クリエイティブエージェント(例: https://creative.adcontextprotocol.org):
  • 自身が保有する 権威あるフォーマット定義 を返す
  • クリエイティブの構築とバリデーションのための完全な仕様を提供します
Media Buy Protocol のみを実装する営業エージェント(例: https://agenticadvertising.org/api/training-agent):
  • 稼働中のプロダクトで使われているフォーマットのみ を返す
  • 権威あるフォーマット仕様についてクリエイティブエージェントを参照します
  • 実際に購入可能なものに基づいて結果をフィルタリングします
両方のプロトコルを実装する営業エージェント — 自前のフォーマット定義と参照フォーマットを合わせて返します。セールスエージェントのクリエイティブ機能を参照。 営業エージェント固有の挙動は list_creative_formats (Sales Agent) を参照。

リクエストパラメーター

ParameterTypeRequiredDescription
format_idsFormatID[]No特定のフォーマット ID のみ返す(get_products レスポンス由来)
typestringNo(非推奨) 種別でフィルター: audio, video, display, dooh。代わりに asset_types フィルターを使用すること。
asset_typesstring[]Noimage, video, audio, text, html, javascript, url を受け付けるフォーマットに絞り込む(OR ロジック)。type フィルターより推奨。
max_widthintegerNo最大幅(ピクセル、以下を含む)- いずれかのレンダーが収まれば一致
max_heightintegerNo最大高さ(ピクセル、以下を含む)- いずれかのレンダーが収まれば一致
min_widthintegerNo最小幅(ピクセル、以上を含む)
min_heightintegerNo最小高さ(ピクセル、以上を含む)
is_responsivebooleanNoレスポンシブ対応(コンテナサイズに適応)に絞る
name_searchstringNo名前による検索(大文字小文字を区別しない部分一致)
wcag_levelstringNo少なくともこの WCAG レベルを満たすフォーマットに絞り込む: AAAAAAアクセシビリティを参照。
disclosure_positionsstring[]Noこれらすべてのディスクロージャーポジションをサポートするフォーマットに絞り込む。disclosure_capabilities が存在する場合はそれに対してマッチングし、存在しない場合は supported_disclosure_positions にフォールバックします。
disclosure_persistencestring[]Nodisclosure_capabilities に少なくとも 1 つのポジションでこれらの持続性モードをすべて含むフォーマットに絞り込む。値: continuousinitialflexible
output_format_idsFormatID[]Nooutput_format_ids にこれらのいずれかが含まれるフォーマットに絞り込む。これらの出力を生成できるフォーマットが返されます。input_format_ids で受け付ける入力を確認します。
input_format_idsFormatID[]Noinput_format_ids にこれらのいずれかが含まれるフォーマットに絞り込む。これらのクリエイティブを入力として受け付けるフォーマットが返されます。output_format_ids で生成できる出力を確認します。
paginationobjectNoページネーション: max_results(1〜100、デフォルト 50)と cursor(前のレスポンスの不透明なカーソル)

複数レンダーの寸法フィルタリング

フォーマットは複数のレンダー(例: 動画 + コンパニオンバナー)を生成する場合があります。寸法フィルターは 「いずれかのレンダーが合致すれば OK」 というロジックです。
  • max_width: 300, max_height: 250 - 少なくとも 1 つ のレンダーが 300×250 以下であれば一致
  • ユースケース: 「300×250 の広告枠に収まるフォーマットを探す」
  • 例: メイン動画 (1920×1080) とコンパニオンバナー (300×250) を持つフォーマットは、バナーが収まるため 一致

レスポンス

FieldDescription
formatsフォーマット定義の完全な配列(format_id、name、assets、renders を含む)。type フィールドは非推奨で省略される場合があります。
creative_agents追加フォーマットを提供する他のクリエイティブエージェントの任意配列
完全なフォーマット構造は Format schema を参照。

再帰的な探索

クリエイティブエージェントは、追加フォーマットを提供する他のクリエイティブエージェントを参照する場合があります。
{
  "creative_agents": [{
    "agent_url": "https://creative.adcontextprotocol.org",
    "agent_name": "AdCP Reference Creative Agent",
    "capabilities": ["validation", "assembly", "preview"]
  }]
}
バイヤーは creative_agents を再帰的に問い合わせできます。無限ループを避けるため、訪問済み URL を必ず追跡すること。

カタログ要件

フォーマットは assets 配列の catalog アセットタイプとしてカタログのニーズを宣言します。これにより、バイヤーはそのフォーマット向けのクリエイティブを送信する前にどのカタログを同期すべきかを把握できます。
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "product_carousel_4x"
  },
  "name": "Product Carousel (4 items)",
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "product_catalog",
      "asset_type": "catalog",
      "required": true,
      "requirements": {
        "catalog_type": "product",
        "min_items": 4,
        "required_fields": ["name", "price", "image_url"]
      }
    }
  ]
}
カタログアセットは asset_type: "catalog" を使用し、以下を含む requirements オブジェクトを持ちます。
FieldTypeDescription
catalog_typestring必須。カタログのタイプ(例: productstorejob
min_itemsintegerカタログが含まなければなりませんアイテムの最小数
max_itemsintegerフォーマットがレンダーできるアイテムの最大数。この制限を超えるアイテムは無視される
required_fieldsstring[]すべてのアイテムに存在しなければなりませんフィールド
feed_formatsstring[]受け付けるフィードフォーマット(例: google_merchant_centerlinkedin_jobs
カタログアセットが存在する場合、バイヤーはクリエイティブを送信する前に sync_catalogs で必要なカタログを同期すること。完全なライフサイクルはカタログを参照。

よくあるシナリオ

プロダクトのフォーマット ID から仕様を取得します

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// Get full specs for formats returned by get_products
const result = await testAgent.listCreativeFormats({
  format_ids: [
    {
      agent_url: 'https://creative.adcontextprotocol.org',
      id: 'video_15s_hosted'
    },
    {
      agent_url: 'https://creative.adcontextprotocol.org',
      id: 'display_300x250'
    }
  ]
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

// Validate response against schema
const validated = ListCreativeFormatsResponseSchema.parse(result.data);
validated.formats.forEach(format => {
  console.log(`${format.name}: ${format.assets.length} assets required`);
});

アセットタイプでフォーマットを探す

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// Find formats that accept images and text
const result = await testAgent.listCreativeFormats({
  asset_types: ['image', 'text']
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = ListCreativeFormatsResponseSchema.parse(result.data);
console.log(`Found ${validated.formats.length} formats`);

// Examine asset requirements
validated.formats.forEach(format => {
  console.log(`\n${format.name}:`);
  format.assets.forEach(asset => {
    const label = asset.asset_role ?? asset.asset_id;
    console.log(`  - ${label}: ${asset.asset_type}`);
  });
});

サードパーティタグ対応フォーマットを探す

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// Find formats that accept JavaScript or HTML tags
const result = await testAgent.listCreativeFormats({
  asset_types: ['javascript', 'html'],
  max_width: 970,
  max_height: 250
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = ListCreativeFormatsResponseSchema.parse(result.data);
console.log(`Found ${validated.formats.length} third-party tag formats ≤ 970×250`);

validated.formats.forEach(format => {
  const renders = format.renders || [];
  if (renders.length > 0) {
    const dims = renders[0].dimensions;
    console.log(`${format.name}: ${dims.width}×${dims.height}`);
  }
});

種別と寸法で絞り込む

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// Find video formats
const result = await testAgent.listCreativeFormats({
  type: 'video'
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = ListCreativeFormatsResponseSchema.parse(result.data);
console.log(`Found ${validated.formats.length} video formats`);

validated.formats.forEach(format => {
  const assetTypes = format.assets.map(a => a.asset_type).join(', ');
  console.log(`${format.name}: ${assetTypes}`);
});

名前で検索します

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// Find mobile-optimized formats
const result = await testAgent.listCreativeFormats({
  name_search: 'mobile'
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = ListCreativeFormatsResponseSchema.parse(result.data);
console.log(`Found ${validated.formats.length} mobile formats`);

validated.formats.forEach(format => {
  console.log(`- ${format.name} (${format.type})`);
});

レスポンシブフォーマットを探す

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// Find formats that adapt to container size
const result = await testAgent.listCreativeFormats({
  is_responsive: true,
  type: 'display'
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = ListCreativeFormatsResponseSchema.parse(result.data);
console.log(`Found ${validated.formats.length} responsive display formats`);

validated.formats.forEach(format => {
  console.log(`${format.name}: Adapts to container`);
});

ビルドケイパビリティを探索します

一部のフォーマットは output_format_ids 経由で生成できる出力フォーマットを宣言します。マルチパブリッシャーのテンプレートツールのようなクリエイティブビルダーは、1 つのアセットグループを受け取り多くのパブリッシャー固有フォーマットを生成する場合があります。フォーマットトランスフォーマーは既存のクリエイティブを受け取り再フォーマットする場合があります。 フォーマットスキーマはリレーションシップの両側を表現します。
  • input_format_ids — このフォーマットが入力として受け付ける既存のクリエイティブフォーマット
  • output_format_ids — このフォーマットが生成できる具体的な出力フォーマット
これらのフィルターは AND で組み合わされます。フォーマットは指定したすべてのフィルターに一致しなければなりません。各フィルター内でのマッチングは OR(配列内のいずれかの ID が一致)です。ディメンションパラメーターなしの裸のフォーマット ID はそのフォーマットのすべてのパラメーター化されたバリアントに一致し、パラメーター化された ID は完全一致です。 注意: asset_types とこれらのフィルターは異なるものを対象にしています。クリエイティブマニフェストのみを入力として受け取るフォーマットは assets 配列にエントリを持たないため、asset_typesinput_format_ids を組み合わせると通常は結果が返らない。 配信時のダイナミッククリエイティブ(広告配信時にデータフィードからレンダーする DCO プラットフォーム)はこれらのフィールドでは表現されない。それらのプラットフォームは assets 経由で入力を、フォーマット自体で出力を記述します。

必要な出力フォーマットが決まっている場合、どんな入力が受け付けられるか?

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// I need portrait video — what can generate it?
const result = await testAgent.listCreativeFormats({
  output_format_ids: [
    { agent_url: 'https://creative.adcontextprotocol.org', id: 'video_9x16_15s' }
  ]
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = ListCreativeFormatsResponseSchema.parse(result.data);
validated.formats.forEach(format => {
  const inputs = format.input_format_ids?.map(f => f.id) ?? ['(from brief)'];
  console.log(`${format.name} accepts: ${inputs.join(', ')}`);
});

手持ちの入力フォーマットから、どんな出力を生成できるか?

import { testAgent } from '@adcp/client/testing';
import { ListCreativeFormatsResponseSchema } from '@adcp/client';

// I have a landscape 16:9 video — what can I transform it into?
const result = await testAgent.listCreativeFormats({
  input_format_ids: [
    { agent_url: 'https://creative.adcontextprotocol.org', id: 'video_16x9_30s' }
  ]
});

if (!result.success) {
  throw new Error(`Request failed: ${result.error}`);
}

const validated = ListCreativeFormatsResponseSchema.parse(result.data);
validated.formats.forEach(format => {
  const outputs = format.output_format_ids?.map(f => f.id) ?? [];
  console.log(`${format.name}${outputs.join(', ')}`);
});

フォーマット構造

各フォーマットには次が含まれます。
FieldDescription
format_idagent_url と id を持つ構造化された識別子
name人が読みやすいフォーマット名
type(非推奨) フォーマット種別(audio、video、display、dooh)。代わりに asset_types フィルターを使用すること。
assetsすべてのアセット配列。必須か任意かは required ブール値で示す
rendersレンダリングされる成果物の配列(寸法、役割)
input_format_idsこのフォーマットが入力マニフェストとして受け付けるクリエイティブフォーマット(生のアセットから機能するフォーマットでは省略)
output_format_idsこのフォーマットが生成できる出力フォーマット(単一の固定出力を生成するフォーマットでは省略)

アセットロール

共通のアセットロールはアセットの用途を把握するのに役立つ。
  • hero_image - メインビジュアル
  • hero_video - メインの動画コンテンツ
  • logo - ブランドロゴ
  • headline - メインテキスト
  • body_text - セカンダリテキスト
  • call_to_action - CTA ボタン文言

アセットタイプのフィルターロジック

asset_types パラメーターは OR ロジック で、指定したいずれかのアセットタイプを受け付けるフォーマットが返されます。 : asset_types: ['html', 'javascript', 'image']
  • html または javascript または image を受け付けるフォーマットが返る
  • ユースケース: 「手元のアセットタイプのどれかで使えるフォーマットを知りたい」
特定の組み合わせを必要とするフォーマットを探す場合 は、取得後に結果をフィルタリングします。
test=false
// 画像とテキストの両方を必要とするフォーマットを探す
const result = await agent.listCreativeFormats();
const imageAndText = result.formats.filter(format => {
  const assetTypes = format.assets.map(a => a.asset_type);
  return assetTypes.includes('image') && assetTypes.includes('text');
});

複数レンダーフォーマットの寸法フィルタリング

複数の成果物を生成するフォーマット例:
  • コンパニオンバナー付き動画 - メイン動画 (1920×1080) + バナー (300×250)
  • アダプティブディスプレイ - デスクトップ (728×90) + モバイル (320×50)
  • DOOH 設置 - 寸法が異なる複数画面
寸法フィルターは 少なくとも 1 つのレンダー が条件に合えば一致します。
test=false
// いずれかのレンダーが 300×250 以下のフォーマットを探す
const result = await agent.listCreativeFormats({
  max_width: 300,
  max_height: 250
});

// 300×250 の枠に収まるレンダーが 1 つでもあれば返される
// より大きいコンパニオンを含む場合もある

実装上の要件

クリエイティブエージェントで list_creative_formats を実装する場合:
  1. 権威あるフォーマットを返す - 定義するフォーマットに関する完全な仕様を含めます
  2. 他エージェントを参照する - creative_agents を使って他のクリエイティブエージェントに委譲します
  3. 能力を明記する - validation、assembly、generation、preview などサポートする操作を示します
  4. フィルターをサポートする - type、asset_types、寸法などのフィルターパラメーターを実装します

エラーハンドリング

Error CodeDescriptionResolution
FORMAT_NOT_FOUNDリクエストされた format_id が存在しないget_products のレスポンスから format_id を確認する
INVALID_REQUESTフィルターパラメーターが不正パラメーターの型と値を確認する
AGENT_NOT_FOUND参照先のクリエイティブエージェントが利用不可廃止されたエージェント由来のフォーマットの可能性

ベストプラクティス

1. format_ids パラメーターを使う get_products で返されたフォーマット仕様を取得する最も効率的な方法。 2. フォーマット仕様をキャッシュする フォーマット仕様は滅多に変わらないため、format_id ごとにキャッシュして API 呼び出しを減らす。 3. タグ系はアセットタイプで検索する asset_types: ['html']['javascript'] を指定してタグを受け付けるフォーマットを探す。 4. 複数レンダーフォーマットを考慮する renders 配列の長さを確認し、複数の掲出面が必要かどうかを把握します。 5. アセット要件を検証する クリエイティブを構築する前に、アセットがフォーマット仕様に一致していることを確認します。

次のステップ

フォーマットを探索したら:
  1. クリエイティブを構築: build_creative でアセットをフォーマットに組み立てる
  2. プレビュー: preview_creative でビジュアルを確認します
  3. 検証: sync_creativesdry_run: true を指定して検証します
  4. アップロード: sync_creatives でエージェントホスト型クリエイティブライブラリにアップロードします

参考