Annual Ads

開発者向けドキュメント

Annual Adsプラットフォーム上で直接開発を行えます。広告主の作成、広告の掲載、支払いの実行、ランキングの追跡まで、すべてAPIを通じて行えます。

価格表の全内容をご覧ください

70%を保持しています Connectモードの広告主が広告に対して支払う金額の一部が、自動的にあなたのウォレットに支払われます。その仕組みについては、以下をご覧ください。

ベースURL

https://api.adhub365.com
OpenAPI 3

認証

すべてのリクエストは、Bearer方式を用いて、Authorizationヘッダー内のシークレットキーで認証されます。

POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/json

サンドボックスと本番環境

サンドボックスキーと本番環境キーは互いに完全に分離されています。つまり、サンドボックスキーでは本番環境キーによって作成されたデータを読み取ったり書き込んだりすることはできず、その逆も同様です。

適用範囲

各キーは、発行時に指定されたスコープに限定されます。つまり、キーが持つアクセス権限は、そのキーを作成したパートナーアカウントのアクセス権限を超えることはありません。

APIキーは、Annual Adsチームによって承認されたパートナーアカウントに発行されます。

パートナーアカウントを作成する

広告収益の分配

APIキーを使用して自社のユーザー向けに広告主アカウントを作成する場合(Connectモード — 上記の「認証」を参照)、それらの広告主が広告に対して支払った金額の一部を受け取ることができます。以下の分配比率は、この同じエンドポイントからリアルタイムで読み込まれるものであり、ハードコードされたものではなく、このページの下部に記載されている紹介手数料とは完全に別物です。

GET https://api.adhub365.com/v1/partner-program
{
  "partner_share_percentage": 0.7,
  "platform_share_percentage": 0.3
}

70%

あなたに決まり

設定済みの支払い用ウォレットに自動的に支払われます。出金リクエストは不要です。

30%

「年間広告」へ

モデレーション、ホスティング、および広告が配信されるランキングの仕組みについて解説します。

仕組み

  1. Connectモードの広告主のうちの1社が、貴社の連携機能を通じて広告費を支払います。
  2. 広告は、自動的に、あるいは当社のモデレーションチームによって審査・承認されます。
  3. お客様のシェアは、以下の紹介プログラムと同じ仕組みで、ウォレットへの自動支払い待ちの状態となっています。
広告が実際に承認されるまでは、シェアは一切発生しません。モデレーションで却下された場合、その支払いについては一切の支払義務が生じません。すでに掲載中の広告への追加出稿にはそのようなリスクはなく、即座にシェアが発生します。

支払い条件

  • パートナーアカウントに、暗号資産の支払い用ウォレットが設定されています。
  • お客様側でKYCの手続きを行う必要はありません。パートナーアカウントは作成時にすでに審査済みとなっています。

例:累積株式数の読み取り

GET https://api.adhub365.com/v1/partner/ad-revenue/earnings
Authorization: Bearer sk_sandbox_...
{
  "shares": [
    {
      "id": "share_1a2b...",
      "payment_id": "pay_9f2a...",
      "ad_id": "ad_7c31...",
      "partner_amount_usd": 140.0,
      "platform_amount_usd": 60.0,
      "status": "paid",
      "payable_after": "2026-08-03T00:00:00Z",
      "paid_at": "2026-08-05T10:12:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 140.0
}

エンドポイント

勘定科目

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/earnings

Connectモードで作成した広告主が広告費として支払った金額のうち、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クレジットで利用できる一連の組み込みAIツール(広告コンテンツおよびビジュアル生成ツール、会話型アシスタント、予算アドバイザー、外部SEO監査ツール)が提供されます。

これらは、パートナーのAPIキーではなく、広告主自身のダッシュボードへのログイン情報(セッションアクセストークン)を通じて実行されるため、サードパーティの統合機能では広告主に代わってこれらを呼び出すことはできません。
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-advisor

30日、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-layoutgrid、list、またはcompact。デフォルトはgridです。compactを選択すると、1つの広告(data-countは無視されます)が表示され、それを小さなピルに折りたたんだり元に戻したりするためのボタンが付きます。これはフッター形式のユニットであり、スクリプト自体によって固定配置されることはなく、コンテナdivの位置やスタイルは、ご自身のページ上で自由に設定できます。
data-offsetスキップする上位表示広告の数。デフォルトは 0 です。同じページ内の 2 つ目のウィジェット(たとえば、フッターにあるコンパクトなウィジェットと、その上のグリッド型ウィジェットなど)で、同じ広告が 2 回表示されるのを防ぎ、別の広告を表示できるようにします。この設定には、もう一方のウィジェットがすでに表示している広告の数を指定してください。
data-partnerパートナーID(ご自身のダッシュボードの「Developers」ページで確認できます)。任意入力 — 入力しない場合、ウィジェットにはそのカテゴリーの公開ランキング全体(プラットフォーム上のすべての広告主)が表示されます。入力すると、Connectモードを通じて獲得した広告主(実際にあなたのシェアを生み出している広告主)の広告のみが表示されます。

収益分配

パートナーへの紹介手数料が実際にどのように支払われるのか――その割合、支払いの仕組み、および前提条件について。

GET https://api.adhub365.com/v1/referral-program
{
  "levels": [
    {
      "level": 1,
      "percentage": 0.1
    }
  ],
  "leaders_pool_percentage_of_gmv": 0.05,
  "founding_advertiser_pool_percentage_of_gmv": 0.05,
  "payout_verification_window_hours": 48,
  "min_payout_usd": 1
}

決まった数ではない

手数料率は当社側で設定されており、変更される可能性があります。そのため、値をハードコーディングするのではなく、常にこのエンドポイントからリアルタイムで取得してください。

全自動

出金に関する終了時点は設定されていません。スケジュールされたジョブは、支払対象となる収益を確定し、広告主ごとにバッチ処理を行い、以下のすべての条件が満たされると自動的に支払われます。

支払い条件

  • 広告主の支払対象となる収益総額が、最低支払額に達しました。
  • そのアカウントには、暗号資産の支払い用ウォレットが設定されています。
  • KYCのステータスは確認済みです。

例:累積利益の読み取り

GET https://api.adhub365.com/v1/partner/referrals/{code}/earnings
Authorization: Bearer sk_sandbox_...
{
  "code": "ann-2f8c",
  "earnings": [
    {
      "id": "earn_1a2b...",
      "payment_id": "pay_9f2a...",
      "amount_usd": 30.0,
      "status": "paid",
      "payable_after": "2026-08-01T00:00:00Z",
      "paid_at": "2026-08-03T14:22:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 30.0
}

料金プラン(提供中)

このエンドポイントからリアルタイムで読み取ってください。これらの値をハードコーディングしないでください。当社側で変更される可能性があります。 「無料枠」の入力欄の代わりに、ユーザー向けのプラン選択画面を作成してください。表示されている各価格は、支払いを作成する際に送信すべき正確な金額そのものであり、ここに表示されている特典内容から、その価格で購入できるものがユーザーに明確に伝わるため、ユーザーは推測で金額を決めるのではなく、内容を理解した上で価格を選択できます。

ティア価格アンロック
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

クリック可能なリンク
Gold$500.00

Animation unlocked

クリック可能なリンクアニメーション
Platinum$1,000.00

Enhanced exposure

クリック可能なリンクアニメーション
Diamond$2,500.00

Premium placement

クリック可能なリンクアニメーション
Elite$5,000.00

Top-tier visibility

クリック可能なリンクアニメーション
Legendary$10,000.00

Maximum visibility & branding

クリック可能なリンクアニメーション

レート制限

リクエストには、キーごと、1分あたりの上限が設定されています。認証済みのレスポンスにはすべて、X-RateLimit-Limit、X-RateLimit-Remaining、およびX-RateLimit-Resetヘッダーが含まれます。上限を超えた場合は、Retry-Afterヘッダーを含む429 Too Many Requestsが返されます。

IP許可リスト

オプション(パートナーごとに設定可能)。エントリを追加するまでは、そのキーはどのIPからのリクエストも受け付けますが、最初のエントリを追加すると、そのパートナーのすべてのキーが許可リストのみの受け入れに切り替わります。

Webhook

すべてのウェブフックは、作成時に一度だけ発行されるシークレットを使用して 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": "...",
    },
)