Annual Adsプラットフォーム上で直接開発を行えます。広告主の作成、広告の掲載、支払いの実行、ランキングの追跡まで、すべてAPIを通じて行えます。
価格表の全内容をご覧ください70%を保持しています Connectモードの広告主が広告に対して支払う金額の一部が、自動的にあなたのウォレットに支払われます。その仕組みについては、以下をご覧ください。
すべてのリクエストは、Bearer方式を用いて、Authorizationヘッダー内のシークレットキーで認証されます。
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAPIキーは、Annual Adsチームによって承認されたパートナーアカウントに発行されます。
パートナーアカウントを作成する| POST | /v1/partner/advertisersユーザーの一人に代わって広告主アカウントを作成します(コネクトモード)。 | advertisers:write |
| GET | /v1/partner/advertisers/{id}このパートナーによって作成された広告主アカウントを検索してください。 | advertisers:read |
| POST | /v1/partner/ads広告を作成します。作成直後は「下書き」状態になります。オプションの fields `advertiser_type`、`promotion_type`、`link_type`、および `promoted_brand` は、アフィリエイト、紹介、クリエイター、または個人の広告を表します。詳細は以下の注記を参照してください。 | ads:write |
| GET | /v1/partner/ads/{id}広告を検索する。 | ads:read |
| PATCH | /v1/partner/ads/{id}編集コンテンツ(タイトル、説明文、リンク、広告主の種類、プロモーションの種類、リンクの種類、プロモーション対象のブランド)を更新します。カテゴリ、地域、およびランキングエンジンが読み取る情報は、ここでは一切変更できません。 | ads:write |
| POST | /v1/partner/ads/{id}/image広告画像を直接アップロードしてください(JPEG/PNG/WebP、最大5 MB)。初回支払い前に必須です。詳細は以下の「支払い」の項目をご覧ください。 | ads:write |
| POST | /v1/partner/ads/{id}/image-urlファイルをアップロードする代わりに、URLから広告画像を設定してください。サーバーが自動的に画像を取得し、再ホスティングを行います。要件は同じで、初回支払い前に設定が必要です。 | ads:write |
| GET | /v1/partner/ads/{id}/rank広告の現在のランク、カテゴリ、および地理的対象範囲。 | ads:read |
| GET | /v1/partner/ads/{id}/stats広告の総表示回数およびクリック数、経過日数/残り日数は、GET /{id} にすでに含まれている activated_at/expires_at フィールドから取得され、順位は GET /{id}/rank から取得されます。 | ads:read |
| POST | /v1/partner/payments初回購入またはチャージのために、仮想通貨による支払いを開始します。広告に画像が設定されていない場合、初回支払いは422エラーで失敗します。詳細は上記の「uploadAdImage」および「setAdImageUrl」を参照してください。 | payments:write |
| GET | /v1/partner/payments/{id}支払いの状況を確認する。 | payments:read |
| POST | /v1/partner/referrals紹介リンクを作成する。 | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsステータス別の紹介報酬累計額。 | referrals:read |
| GET | /v1/partner/ad-revenue/earningsConnectモードで作成した広告主が広告費として支払った金額のうち、70%に相当するあなたの取り分です。ステータス別に内訳を示します。 | ad-revenue:read |
| GET | /v1/partner/access-logこのキーの完全な呼び出し履歴 — メソッド、パス、IP、タイムスタンプ。 | あそこ |
| GET | /v1/rankings?category={id}&geo={scope}カテゴリおよび地域範囲ごとの読み取り専用ランキング。 | 公開 |
| GET | /v1/tiers設定された7つの価格帯(閾値、アンロックされる特典)。 | 公開 |
| GET | /v1/referral-program現在、リファラル・カスケードおよびリーダーズ・プールで適用されている手数料率。 | 公開 |
| GET | /v1/partner-program現在、あなたとAnnual Adsの間で適用されている広告収益の配分比率(Connectモード)。 | 公開 |
| GET | /v1/search?q={query}自然言語検索 — 「ケニアの家具広告主」といったクエリを、該当するカテゴリと地域範囲に振り分け、そのランキングを実際の順序そのままに返します。 | 公開 |
アフィリエイトおよび紹介広告
advertiser_type、promotion_type、link_type、および promoted_brand は、POST および PATCH /v1/partner/ads におけるオプションのフィールドです。Annual Ads は、自社を宣伝する企業に限定されません。 link_type が affiliate_link または referral_invitation_link の場合、あるいは promotion_type が affiliate_offer または referral_opportunity の場合、affiliate_terms_accepted は true でなければならず、そうでない場合はリクエストが 422 で拒否されます。 title の文字数上限は 35 文字、description は 80 文字です。これらはダッシュボードの UI だけでなく、サーバー側でも強制されます。
すべての広告主アカウントには、定額制の年間料金に加えて、AIクレジットで利用できる一連の組み込みAIツール(広告コンテンツおよびビジュアル生成ツール、会話型アシスタント、予算アドバイザー、外部SEO監査ツール)が提供されます。
| POST | /v1/advertisers/{id}/ai/assistant「Ask Annual Ads」——フローティング型の会話型アシスタントです。情報提供のみを目的としており、アカウントデータについては読み取り専用です。 | 公開 |
| POST | /v1/advertisers/{id}/ai/creative-studio簡単な事業概要から、広告のタイトル、説明文、キーワードを生成します。 | 2 単位 |
| POST | /v1/advertisers/{id}/ai/creative-studio/image同じ事業概要から、広告に添付できる状態でホストされた掲載用画像(PNG)を生成します。 | 8 単位 |
| POST | /v1/advertisers/{id}/ai/budget-advisor30日、90日、365日後に特定のランクを維持できる確率に関する、真の統計的予測(決して推測によるものではない)。 | 1 単位 |
| POST | /v1/advertisers/{id}/ai/seo-audit広告主が運営する外部ウェブサイトを分析し、具体的なSEO改善策を提案してください。 | 2 単位 |
以下の画像生成機能も、同じカテゴリーと事業概要に基づいて動作しています。
POST https://api.adhub365.com/v1/advertisers/{advertiser_id}/ai/creative-studio
Authorization: Bearer <session access token>
Content-Type: application/json
{
"category_name": "Furniture",
"business_description": "We sell handmade oak dining tables"
}{
"title": "Handmade Oak Dining Tables — Built to Last",
"description": "Solid oak dining tables crafted by hand, built to last a lifetime.",
"keywords": ["oak furniture", "dining table", "handmade"],
"credits_remaining": 8
}同じ広告に合わせて、適切なビジュアルを生成します:
POST https://api.adhub365.com/v1/advertisers/{advertiser_id}/ai/creative-studio/image
Authorization: Bearer <session access token>
Content-Type: application/json
{
"category_name": "Furniture",
"business_description": "We sell handmade oak dining tables"
}{
"visual_url": "https://cdn.uploadscenter.com/file_01m1...",
"credits_remaining": 4
}既製の広告ユニットを自分のサイトにドラッグ&ドロップするだけで、作成作業もiframeも不要です。スクリプトは、隔離されたShadow DOM内でページに直接レンダリングされるため、そのスタイルがサイトに漏れることはなく、またサイトのスタイルが広告ユニットに漏れることもありません。
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-count="4"
data-columns="2"
></div>
<script async src="https://adhub365.com/widget.js"></script>デフォルトでは、このカテゴリの公開ランキング全体が表示されます。つまり、あなたが紹介したものだけでなく、プラットフォーム上のすべての広告主が含まれます。「Connectモード」を通じて作成した広告主(あなたのシェアを生み出している広告主)の広告のみを表示するには、パートナーID(ご自身のダッシュボードの「開発者」ページで確認できます)を指定して「data-partner」を追加してください:
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>広告主が複数のカテゴリーにまたがっている場合は、「data-category」を完全に削除してください。これにより、「data-partner」のみを設定することで、ウィジェットはすべてのカテゴリーにわたる広告を1つのグリッドにまとめて表示するようになり、カテゴリーごとに個別のウィジェットブロックを用意する必要がなくなります:
<div
class="annualads-widget"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>コンテンツ内のウィジェットとは別に、フッター形式のウィジェットを追加して、それぞれ異なる広告を表示させたいですか?その場合は、data-layout="compact"(広告1つ、小さなピル型に折りたためる)を指定し、data-offsetを最初のウィジェットがすでに表示している広告の数に合わせて設定した2つ目のウィジェットブロックを追加してください:
<!-- in your content -->
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-count="4"
data-columns="2"
></div>
<!-- in your footer, showing different ads via data-offset -->
<div
class="annualads-widget"
data-category="YOUR_CATEGORY_ID"
data-geo="global"
data-layout="compact"
data-offset="4"
></div>
<script async src="https://adhub365.com/widget.js"></script>data-category | 表示するカテゴリID。必須 — 「data-partner」が設定されている場合はこの指定を省略すると、そのパートナーの広告がすべてのカテゴリに表示されます。 |
data-geo | 地理的範囲:ローカル、地域、またはグローバル。デフォルトはグローバルです。 |
data-count | 表示する広告の数。デフォルトは4です。 |
data-columns | グリッドの列数。デフォルトは 2 です。 |
data-layout | grid、list、またはcompact。デフォルトはgridです。compactを選択すると、1つの広告(data-countは無視されます)が表示され、それを小さなピルに折りたたんだり元に戻したりするためのボタンが付きます。これはフッター形式のユニットであり、スクリプト自体によって固定配置されることはなく、コンテナdivの位置やスタイルは、ご自身のページ上で自由に設定できます。 |
data-offset | スキップする上位表示広告の数。デフォルトは 0 です。同じページ内の 2 つ目のウィジェット(たとえば、フッターにあるコンパクトなウィジェットと、その上のグリッド型ウィジェットなど)で、同じ広告が 2 回表示されるのを防ぎ、別の広告を表示できるようにします。この設定には、もう一方のウィジェットがすでに表示している広告の数を指定してください。 |
data-partner | パートナーID(ご自身のダッシュボードの「Developers」ページで確認できます)。任意入力 — 入力しない場合、ウィジェットにはそのカテゴリーの公開ランキング全体(プラットフォーム上のすべての広告主)が表示されます。入力すると、Connectモードを通じて獲得した広告主(実際にあなたのシェアを生み出している広告主)の広告のみが表示されます。 |
リクエストには、キーごと、1分あたりの上限が設定されています。認証済みのレスポンスにはすべて、X-RateLimit-Limit、X-RateLimit-Remaining、およびX-RateLimit-Resetヘッダーが含まれます。上限を超えた場合は、Retry-Afterヘッダーを含む429 Too Many Requestsが返されます。
オプション(パートナーごとに設定可能)。エントリを追加するまでは、そのキーはどのIPからのリクエストも受け付けますが、最初のエントリを追加すると、そのパートナーのすべてのキーが許可リストのみの受け入れに切り替わります。
すべてのウェブフックは、作成時に一度だけ発行されるシークレットを使用して HMAC-SHA256 で署名されています。ペイロードを信頼する前に、署名を検証してください。イベントは、関連する広告主を所有するパートナーにのみ配信されます。
payment.succeeded | お支払いが確認されました。 |
payment.refunded | 返金処理が完了しました。 |
ad.activated | 広告は、自動的に、あるいは管理者の審査を経て公開されます。 |
invoice.issued | 請求書が発行されます。 |
referral.payout.completed | 紹介手数料が支払対象となりました。 |
referral.payout.failed | 紹介報酬の支払処理がプロバイダー側で失敗しました。収益は「支払予定」に戻され、再処理されます。 |
rank.changed | 広告の順位は変動します。これには、他の広告主による支払いが原因で順位が変動する場合も含まれます。 |
ad.expiring_soon | 広告の有効期限が切れる30日、7日、または1日前。 |
partner_ad_revenue.payout.completed | 広告収益分配金の支払いが「支払い済み」の状態になりました。 |
partner_ad_revenue.payout.failed | プロバイダー側で広告収益分配の支払いバッチが失敗しました。分配額は「支払予定」に戻され、再処理されます。 |
このAPI仕様書に基づいて生成される公式のJavaScript/TypeScriptおよびPython用SDKは計画中ですが、まだ公開されていません。公開されるまでは、HTTP APIを直接呼び出してください。
SDKはまだ提供されていません。これらはHTTP APIを直接呼び出すため、どのプログラミング言語でも今すぐ利用可能です。
cURL
curl -X POST https://api.adhub365.com/v1/partner/ads \
-H "Authorization: Bearer sk_sandbox_..." \
-H "Content-Type: application/json" \
-d '{"advertiser_id":"adv_9f2a...","category_id":"cat_furniture","geo_scope":"local","title":"..."}'JavaScript
await fetch("https://api.adhub365.com/v1/partner/ads", {
method: "POST",
headers: {
Authorization: "Bearer sk_sandbox_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
advertiser_id: "adv_9f2a...",
category_id: "cat_furniture",
geo_scope: "local",
title: "...",
}),
});Python
import requests
requests.post(
"https://api.adhub365.com/v1/partner/ads",
headers={"Authorization": "Bearer sk_sandbox_..."},
json={
"advertiser_id": "adv_9f2a...",
"category_id": "cat_furniture",
"geo_scope": "local",
"title": "...",
},
)