Skip to main content
クリエイティブマニフェストのプレビューを生成します。単体プレビューとバッチプレビューの両方をサポートし、複数クリエイティブでは 5〜10 倍高速にレンダリングできます。

クイックスタート

単体クリエイティブのプレビュー

{
  "request_type": "single",
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "native_responsive"
  },
  "creative_manifest": { /* your creative */ }
}
レスポンス:
{
  "response_type": "single",
  "previews": [
    {
      "preview_url": "https://creative-agent.example.com/preview/abc123",
      "input": { "name": "Default", "macros": {} }
    }
  ],
  "expires_at": "2025-02-15T18:00:00Z"
}
iframe 埋め込み例:
<iframe src="https://creative-agent.example.com/preview/abc123"
        width="600" height="400"></iframe>

HTML 直接埋め込み

iframe を使わず高速にレンダリングする場合は HTML を直接要求します。
{
  "request_type": "single",
  "format_id": { "agent_url": "...", "id": "native_responsive" },
  "creative_manifest": { /* your creative */ },
  "output_format": "html"
}
レスポンスは生の HTML を含みます。
{
  "response_type": "single",
  "previews": [
    {
      "preview_html": "<div class=\"creative\">...</div>",
      "input": { "name": "Default", "macros": {} }
    }
  ]
}
output_format: "html" は信頼できるクリエイティブエージェントでのみ使用してください。直接 HTML を埋め込むと iframe サンドボックスを回避します。

バッチプレビュー(複数クリエイティブ)

複数クリエイティブを 1 回の API 呼び出しでプレビューします(5〜10 倍高速)。
{
  "request_type": "batch",
  "requests": [
    { "format_id": {...}, "creative_manifest": { /* creative 1 */ } },
    { "format_id": {...}, "creative_manifest": { /* creative 2 */ } }
  ]
}
レスポンスはリクエスト順に返されます。
{
  "response_type": "batch",
  "results": [
    { "success": true, "response": { "previews": [...], "expires_at": "..." } },
    { "success": true, "response": { "previews": [...], "expires_at": "..." } }
  ]
}

リクエストパラメータ

単体モード

ParameterTypeRequiredDescription
request_typestringYes"single"
format_idFormatIDYesフォーマット ID(agent_url + id)
creative_manifestobjectYes完成したクリエイティブマニフェスト
inputsarrayNo複数プレビューを作るための入力セット
output_formatstringNo"url"(デフォルト)または "html"

バッチモード

ParameterTypeRequiredDescription
request_typestringYes"batch"
requestsarrayYes1〜50 件のプレビューレコードの配列
output_formatstringNo全リクエストに適用するデフォルトの出力形式

Input Sets

異なるコンテキストを指定して複数のプレビューを生成します。
{
  "inputs": [
    { "name": "Desktop", "macros": { "DEVICE_TYPE": "desktop" } },
    { "name": "Mobile", "macros": { "DEVICE_TYPE": "mobile" } },
    { "name": "Morning Context", "context_description": "User commuting to work" }
  ]
}
利用できるマクロ: DEVICE_TYPE, COUNTRY, CITY, DMA, GDPR, US_PRIVACY, CONTENT_GENRE など context_description: ホストリード音声広告など AI 生成コンテンツ向けに文脈を渡すために使用。

レスポンス形式

単体モードのレスポンス

{
  response_type: "single";
  previews: Preview[];       // 入力ごと、またはデフォルト 1 件
  interactive_url?: string;  // 省略可: テストページ
  expires_at: string;        // ISO 8601 の有効期限
}

バッチモードのレスポンス

{
  response_type: "batch";
  results: Array<{
    success: boolean;
    response?: { previews: Preview[]; expires_at: string; };
    error?: PreviewError;
  }>;
}

Preview オブジェクト

type Preview = {
  previews: Array<{
    preview_url?: string;     // iframe 用の URL
    preview_html?: string;    // 直接埋め込み用 HTML
    renders?: Array<{
      render_type: "image" | "html";
      preview_url?: string;
      preview_html?: string;
      width?: number;
      height?: number;
    }>;
    input: {
      name?: string;
      macros?: Record<string, string>;
      context_description?: string;
    };
  }>;
  expires_at: string;
};

type PreviewError = {
  code: string;
  message: string;
  field?: string;
};

出力形式の選択

  • output_format: "url"(デフォルト): 安全性重視、サンドボックスされた iframe での検証に適する
  • output_format: "html": フォーマットカタログや大規模なプレビュー一覧を高速表示する場合。信頼できるクリエイティブエージェントでのみ使用

レイテンシとスループット

  • 単体リクエスト: 1 件あたりおおむね 200–500ms
  • バッチリクエスト: 1〜50 件をまとめて処理し 5–10 倍高速
  • expires_at まで結果をキャッシュし、同じマニフェスト + format_id では再生成を避ける

エラーハンドリング

バッチモードでは成功と失敗が混在します。results をフィルタリングして失敗のみ再試行するパターンが推奨です。
const response = await client.preview_creative({
  request_type: "batch",
  requests: formatRequests
});

const failed = response.results.filter(r => !r.success);
if (failed.length > 0) {
  failed.forEach((r) => {
    console.error(`${r.error.code}: ${r.error.message}`);
  });
}

典型的なエラーコード

  • VALIDATION_ERROR: マニフェストの必須フィールド不足
  • UNSUPPORTED_FORMAT: format_id が無効、またはエージェントが未対応
  • RATE_LIMITED: リクエストが許容量を超過
  • INTERNAL_ERROR: 予期しないサーバーエラー。時間をおいて再試行

よくある利用パターン

  • フォーマットギャラリー: output_format: "html" で 10+ フォーマットを一覧表示
  • キャンペーンレビュー: バッチでキャンペーン内のクリエイティブをまとめて確認
  • 開発テスト: 単体モードで 1 つのマニフェストを高速に検証

関連ドキュメント