Annual Ads

Dokumentasi pembangun

Bina terus di platform Annual Ads — cipta pengiklan, terbitkan iklan, jalankan pembayaran, dan pantau kedudukan, semuanya melalui API.

Lihat jadual harga penuh

Anda mengekalkan 70% daripada apa yang dibayar oleh pengiklan Mod Connect anda untuk iklan mereka — dibayar secara automatik ke dompet anda. Lihat bagaimana ia berfungsi di bawah.

URL pangkalan

https://api.adhub365.com
OpenAPI 3

Pengesahan

Setiap permintaan disahkan dengan kunci rahsia dalam header Autentikasi, menggunakan skema Bearer.

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

Sandbox & pengeluaran

Kunci sandbox dan kunci pengeluaran dipisahkan sepenuhnya antara satu sama lain — kunci sandbox tidak akan pernah dapat membaca atau menulis data yang dibuat oleh kunci pengeluaran, dan sebaliknya.

Skop

Setiap kunci terhad kepada skop yang dikeluarkan bersamanya — kunci tidak pernah mempunyai akses lebih daripada akaun rakan kongsi yang menciptanya.

Kunci API dikeluarkan kepada akaun rakan kongsi yang diluluskan oleh pasukan Iklan Tahunan.

Buat akaun rakan kongsi

Pembahagian hasil iklan

Jika kunci API anda mencipta akaun pengiklan untuk pengguna anda sendiri (mod Connect — lihat Autentikasi di atas), anda akan memperoleh bahagian daripada apa yang dibayar oleh pengiklan tersebut untuk iklan mereka. Pembahagian di bawah dibaca secara langsung daripada hujung yang sama ini, tidak pernah di-hardcode, dan sepenuhnya berasingan daripada komisen rujukan yang terdapat lebih bawah pada halaman ini.

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

70%

Terima kasih

Dibayar secara automatik ke dompet pembayaran yang anda tetapkan — tiada permintaan pengeluaran diperlukan.

30%

Pergi ke Iklan Tahunan

Mencakup moderasi, pengehosan, dan infrastruktur penarafan yang digunakan oleh iklan anda.

Bagaimana ia berfungsi

  1. Salah seorang pengiklan dalam mod Connect anda membayar untuk iklan melalui integrasi anda.
  2. Iklan itu disemak dan diluluskan — secara automatik, atau oleh pasukan moderasi kami.
  3. Bahagian anda telah diletakkan dalam barisan untuk pembayaran automatik ke dompet anda, mekanisme yang sama seperti program rujukan di bawah.
Sebuah saham tidak akan diwujudkan sehingga iklan itu benar-benar diluluskan — jika moderasi menolaknya, tiada apa-apa yang perlu dibayar bagi pembayaran tersebut. Penambahan dana pada iklan yang sudah aktif tidak membawa risiko sedemikian dan akan dikongsi serta-merta.

Syarat pembayaran

  • Dompet pembayaran kripto telah dikonfigurasikan pada akaun rakan kongsi anda.
  • Tiada KYC diperlukan di pihak anda — akaun rakan kongsi anda telah disemak semasa penciptaannya.

Contoh: membaca saham terkumpul

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
}

Titik akhir

Akaun

POST/v1/partner/advertisers

Buat akaun pengiklan bagi pihak salah seorang pengguna anda (Mod Sambung).

advertisers:write
GET/v1/partner/advertisers/{id}

Semak akaun pengiklan yang dibuat oleh rakan kongsi ini.

advertisers:read

Iklan

POST/v1/partner/ads

Buat iklan. Ia bermula dalam status draf. Medan pilihan advertiser_type, promotion_type, link_type, dan promoted_brand menerangkan pengiklanan rakan kongsi, rujukan, pencipta, atau individu — lihat nota di bawah.

ads:write
GET/v1/partner/ads/{id}

Cari iklan.

ads:read
PATCH/v1/partner/ads/{id}

Kemas kini kandungan editorial — tajuk, keterangan, pautan, jenis pengiklan, jenis promosi, jenis pautan, dan jenama yang dipromosikan. Kategori, geografi, dan apa sahaja yang dibaca oleh enjin penarafan tidak boleh diubah di sini.

ads:write
POST/v1/partner/ads/{id}/image

Muat naik imej iklan terus (JPEG/PNG/WebP, maksimum 5 MB). Diperlukan sebelum pembayaran pertama — lihat kumpulan pembayaran di bawah.

ads:write
POST/v1/partner/ads/{id}/image-url

Tetapkan imej iklan daripada URL dan bukannya memuat naik fail — pelayan akan memuat turun dan menghoskannya semula sendiri. Keperluan yang sama: diperlukan sebelum pembayaran pertama.

ads:write
GET/v1/partner/ads/{id}/rank

Peringkat semasa, kategori, dan skop geografi untuk iklan.

ads:read
GET/v1/partner/ads/{id}/stats

Jumlah tontonan dan klik untuk iklan — hari yang telah berlalu/yang tinggal diperoleh daripada medan activated_at/expires_at yang sudah ada pada GET /{id}, dan kedudukan diperoleh daripada GET /{id}/rank.

ads:read

Pembayaran

POST/v1/partner/payments

Mulakan pembayaran kripto untuk pembelian awal atau pengisian semula. Pembayaran awal gagal dengan ralat 422 melainkan iklan tersebut sudah mempunyai imej — lihat uploadAdImage/setAdImageUrl di atas.

payments:write
GET/v1/partner/payments/{id}

Semak status pembayaran.

payments:read

Rujukan

POST/v1/partner/referrals

Buat pautan rujukan.

referrals:write
GET/v1/partner/referrals/{code}/earnings

Jumlah pendapatan rujukan terkumpul, dipecahkan mengikut status.

referrals:read

Pembahagian hasil iklan

GET/v1/partner/ad-revenue/earnings

Bahagian 70% anda daripada apa yang dibayar oleh pengiklan yang anda hasilkan dalam mod Connect untuk iklan mereka, dipecahkan mengikut status.

ad-revenue:read

Log akses

GET/v1/partner/access-log

Sejarah panggilan penuh untuk kunci ini — kaedah, laluan, IP, cap masa.

Di sana

Titik hujung awam

GET/v1/rankings?category={id}&geo={scope}

Peringkat baca sahaja untuk kategori dan skop geografi.

Awam
GET/v1/tiers

7 peringkat harga yang dikonfigurasikan (ambang, faedah terungkap).

Awam
GET/v1/referral-program

Peratusan komisen yang kini aktif untuk kaskad rujukan dan Kolam Pemimpin.

Awam
GET/v1/partner-program

Peratusan pembahagian hasil iklan semasa (Mod Connect) antara anda dan Annual Ads.

Awam
GET/v1/search?q={query}

Carian bahasa semula jadi — mengarahkan pertanyaan seperti "pengiklan perabot di Kenya" ke kategori dan skop geografi yang sepadan, kemudian memulangkan kedudukan itu dalam susunan sebenar sebenar.

Awam

Pengiklanan afiliasi dan rujukan

advertiser_type, promotion_type, link_type, dan promoted_brand adalah medan pilihan pada POST dan PATCH /v1/partner/ads — Iklan Tahunan tidak terhad kepada perniagaan yang mengiklankan diri mereka sendiri. Apabila link_type adalah affiliate_link atau referral_invitation_link, atau promotion_type adalah affiliate_offer atau referral_opportunity, affiliate_terms_accepted mesti benar atau permintaan akan ditolak dengan kod ralat 422. tajuk dihadkan kepada 35 aksara dan keterangan kepada 80 — kedua-duanya dikuatkuasakan di pihak pelayan, bukan hanya dalam UI papan pemuka.

Alat AI

Setiap akaun pengiklan mendapat satu set alat AI terbina dalam — penjana kandungan dan visual iklan, pembantu perbualan, penasihat bajet, dan pemeriksa SEO luaran — dibayar dengan kredit AI, di atas harga tahunan tetap.

Ini dijalankan melalui log masuk papan pemuka pengiklan sendiri (token akses sesi), bukan melalui kunci API rakan kongsi — integrasi pihak ketiga tidak boleh memanggilnya bagi pihak pengiklan.
POST/v1/advertisers/{id}/ai/assistant

Ask Annual Ads — pembantu perbualan terapung, hanya untuk maklumat, hanya baca pada data akaun.

Awam
POST/v1/advertisers/{id}/ai/creative-studio

Jana tajuk iklan, keterangan, dan kata kunci daripada keterangan perniagaan ringkas.

2 kredit
POST/v1/advertisers/{id}/ai/creative-studio/image

Jana visual senarai (PNG) daripada deskripsi perniagaan yang sama, dihoskan dan sedia untuk dilampirkan pada iklan.

8 kredit
POST/v1/advertisers/{id}/ai/budget-advisor

Projeksi statistik sebenar — bukan sekadar andaian generatif — mengenai kebarangkalian mengekalkan pangkat tertentu pada 30/90/365 hari.

1 kredit
POST/v1/advertisers/{id}/ai/seo-audit

Analisis laman web luaran pengiklan itu sendiri dan cadangkan penambahbaikan SEO yang konkrit.

2 kredit

Contoh — menjana kandungan iklan

Kategori dan keterangan perniagaan yang sama juga memacu penjana imej di bawah.

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
}

Jana visual padanan untuk iklan yang sama:

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
}

Widget

Letakkan unit iklan siap guna ke dalam laman anda — tiada langkah pembinaan, tiada iframe. Skrip ini memaparkan terus ke dalam halaman di dalam Shadow DOM terasing, jadi gaya daripadanya tidak akan bocor ke laman anda, dan gaya laman anda tidak akan bocor ke dalamnya.

Tambahkannya ke halaman anda

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

Secara lalai, ini memaparkan kedudukan awam penuh untuk kategori — setiap pengiklan di platform, bukan hanya pengiklan yang anda bawa masuk. Untuk memaparkan hanya iklan daripada pengiklan yang anda hasilkan melalui mod Connect (yang menjana bahagian anda), tambahkan data-partner dengan ID rakan kongsi anda (temui di halaman Pembangun pada papan pemuka anda sendiri):

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

Jika pengiklan anda merangkumi beberapa kategori, buang sepenuhnya data-category — dengan hanya data-partner, widget akan memaparkan semua iklan anda merentas semua kategori dalam satu grid, tanpa perlu satu blok widget bagi setiap kategori:

<div
  class="annualads-widget"
  data-geo="global"
  data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>

Mahu unit gaya kaki halaman di sebelah unit dalam kandungan anda, masing-masing memaparkan iklan yang berbeza? Tambah blok widget kedua dengan data-layout="compact" (satu iklan, boleh dikurangkan menjadi pil kecil) dan tetapkan data-offset mengikut berapa banyak iklan yang sudah dipaparkan oleh widget pertama anda:

<!-- 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>

Sifat

data-categoryID Kategori untuk dipaparkan. Diperlukan — melainkan data-partner ditetapkan, dalam kes itu mengabaikannya akan memaparkan iklan rakan kongsi tersebut di setiap kategori.
data-geoSkop geografi: tempatan, serantau, atau global. Secara lalai: global.
data-countBilangan iklan untuk dipaparkan. Lalai kepada 4.
data-columnsBilangan lajur grid. Lalai kepada 2.
data-layoutgrid, list, atau compact. Lalai kepada grid. compact memaparkan satu iklan (data-count diabaikan) dengan butang untuk mengecilkannya menjadi pil kecil dan memulihkannya — unit gaya kaki halaman, tidak pernah diletakkan tetap oleh skrip itu sendiri, anda meletakkan dan menggayakan div kontena mengikut kehendak anda sendiri di halaman anda.
data-offsetBilangan iklan teratas yang hendak dilangkau. Lalai kepada 0. Membolehkan widget kedua pada halaman yang sama (contohnya widget ringkas di bahagian kaki halaman dan widget grid di bahagian atas) memaparkan iklan yang berbeza daripada mengulangi iklan yang sama dua kali — nyatakan bilangan iklan yang sudah dipaparkan oleh widget lain.
data-partnerID rakan kongsi anda (temui di halaman Pembangun pada papan pemuka anda). Pilihan — tanpa ia, widget akan memaparkan kedudukan awam penuh untuk kategori itu, setiap pengiklan di platform. Dengan ia, hanya iklan daripada pengiklan yang anda bawa masuk melalui mod Connect — yang sebenarnya menjana bahagian anda.

Pembahagian hasil

Bagaimana komisen rujukan rakan kongsi sebenarnya sampai kepada mereka — peratusannya, mekanisme pembayaran, dan prasyaratnya.

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
}

Bukan nombor tetap

Peratusan komisen dikonfigurasikan di pihak kami dan boleh berubah — sentiasa baca secara langsung dari titik hujung ini dan bukannya memasukkan nilai secara tetap.

Sepenuhnya automatik

Tiada titik penarikan. Pekerjaan terjadual menjana pendapatan yang boleh dibayar, mengumpulkannya mengikut pengiklan, dan membayar secara automatik sebaik sahaja semua syarat di bawah dipenuhi.

Syarat pembayaran

  • Jumlah keseluruhan pendapatan yang perlu dibayar kepada pengiklan mencapai jumlah pembayaran minimum.
  • Dompet pembayaran kripto telah dikonfigurasikan pada akaun mereka.
  • Status KYC mereka telah disahkan.

Contoh: membaca pendapatan terkumpul

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
}

Tahap harga (langsung)

Baca secara langsung dari hujung ini — jangan pernah menulis nilai-nilai ini secara tetap, ia boleh berubah di pihak kami. Bina pemilih peringkat untuk pengguna anda sendiri, bukan medan jumlah percuma: setiap harga yang dipaparkan sudah merupakan jumlah tepat yang perlu dihantar semasa membuat pembayaran, dan manfaat terungkap yang dipaparkan di sini memberitahu pengguna dengan tepat apa yang mereka peroleh pada harga tersebut, supaya mereka memilih harga yang mereka fahami, bukan meneka nombor.

TingkatHargaMembuka
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Pautan boleh klik
Gold$500.00

Animation unlocked

Pautan boleh klikAnimasi
Platinum$1,000.00

Enhanced exposure

Pautan boleh klikAnimasi
Diamond$2,500.00

Premium placement

Pautan boleh klikAnimasi
Elite$5,000.00

Top-tier visibility

Pautan boleh klikAnimasi
Legendary$10,000.00

Maximum visibility & branding

Pautan boleh klikAnimasi

Had kadar

Permintaan dihadkan setiap kunci, setiap minit. Setiap respons yang disahkan membawa header X-RateLimit-Limit, X-RateLimit-Remaining, dan X-RateLimit-Reset; melebihi had akan mengembalikan kod ralat 429 Terlalu Banyak Permintaan dengan header Retry-After.

Senarai benarkan IP

Pilihan, bagi setiap rakan kongsi. Sehingga anda menambah entri, kunci anda menerima permintaan daripada mana-mana IP — entri pertama menukar semua kunci rakan kongsi tersebut kepada senarai benarkan sahaja.

Webhook

Setiap webhook ditandatangani dengan HMAC-SHA256 menggunakan rahsia yang dikeluarkan sekali sahaja pada masa penciptaan — sahkan tandatangan sebelum mempercayai muatan. Acara hanya dihantar kepada rakan kongsi yang memiliki pengiklan berkaitan.

payment.succeededPembayaran disahkan.
payment.refundedPembayaran balik telah dilaksanakan.
ad.activatedIklan menjadi aktif secara automatik atau selepas semakan pentadbir.
invoice.issuedSebuah invois telah dikeluarkan.
referral.payout.completedKomisen rujukan mencapai status dibayar.
referral.payout.failedBatch pembayaran rujukan gagal di penyedia — pendapatan dikembalikan ke dalam akaun terhutang dan dicuba semula.
rank.changedPeringkat iklan berubah — termasuk apabila pembayaran pengiklan lain menyebabkannya.
ad.expiring_soon30, 7, atau 1 hari sebelum iklan tamat tempoh.
partner_ad_revenue.payout.completedBayaran kongsi hasil iklan mencapai status dibayar.
partner_ad_revenue.payout.failedSekumpulan pembayaran perkongsian hasil iklan gagal di penyedia — saham dikembalikan ke dalam akaun terhutang dan dicuba semula.

Kit Pembangunan Perisian

SDK rasmi JavaScript/TypeScript dan Python, yang dijana daripada spesifikasi API yang sama ini, dirancang tetapi belum diterbitkan — sehingga itu, panggil terus API HTTP.

Permulaan Cepat

Masih tiada SDK — panggilan ini dibuat terus ke API HTTP dan berfungsi hari ini dalam apa jua bahasa.

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": "...",
    },
)