Bina terus di platform Annual Ads — cipta pengiklan, terbitkan iklan, jalankan pembayaran, dan pantau kedudukan, semuanya melalui API.
Lihat jadual harga penuhAnda 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.
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/jsonKunci API dikeluarkan kepada akaun rakan kongsi yang diluluskan oleh pasukan Iklan Tahunan.
Buat akaun rakan kongsi| POST | /v1/partner/advertisersBuat 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 |
| POST | /v1/partner/adsBuat 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}/imageMuat 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-urlTetapkan 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}/rankPeringkat semasa, kategori, dan skop geografi untuk iklan. | ads:read |
| GET | /v1/partner/ads/{id}/statsJumlah 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 |
| POST | /v1/partner/paymentsMulakan 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 |
| POST | /v1/partner/referralsBuat pautan rujukan. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsJumlah pendapatan rujukan terkumpul, dipecahkan mengikut status. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsBahagian 70% anda daripada apa yang dibayar oleh pengiklan yang anda hasilkan dalam mod Connect untuk iklan mereka, dipecahkan mengikut status. | ad-revenue:read |
| GET | /v1/partner/access-logSejarah panggilan penuh untuk kunci ini — kaedah, laluan, IP, cap masa. | Di sana |
| GET | /v1/rankings?category={id}&geo={scope}Peringkat baca sahaja untuk kategori dan skop geografi. | Awam |
| GET | /v1/tiers7 peringkat harga yang dikonfigurasikan (ambang, faedah terungkap). | Awam |
| GET | /v1/referral-programPeratusan komisen yang kini aktif untuk kaskad rujukan dan Kolam Pemimpin. | Awam |
| GET | /v1/partner-programPeratusan 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.
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.
| POST | /v1/advertisers/{id}/ai/assistantAsk Annual Ads — pembantu perbualan terapung, hanya untuk maklumat, hanya baca pada data akaun. | Awam |
| POST | /v1/advertisers/{id}/ai/creative-studioJana tajuk iklan, keterangan, dan kata kunci daripada keterangan perniagaan ringkas. | 2 kredit |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageJana visual senarai (PNG) daripada deskripsi perniagaan yang sama, dihoskan dan sedia untuk dilampirkan pada iklan. | 8 kredit |
| POST | /v1/advertisers/{id}/ai/budget-advisorProjeksi statistik sebenar — bukan sekadar andaian generatif — mengenai kebarangkalian mengekalkan pangkat tertentu pada 30/90/365 hari. | 1 kredit |
| POST | /v1/advertisers/{id}/ai/seo-auditAnalisis laman web luaran pengiklan itu sendiri dan cadangkan penambahbaikan SEO yang konkrit. | 2 kredit |
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
}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.
<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>data-category | ID Kategori untuk dipaparkan. Diperlukan — melainkan data-partner ditetapkan, dalam kes itu mengabaikannya akan memaparkan iklan rakan kongsi tersebut di setiap kategori. |
data-geo | Skop geografi: tempatan, serantau, atau global. Secara lalai: global. |
data-count | Bilangan iklan untuk dipaparkan. Lalai kepada 4. |
data-columns | Bilangan lajur grid. Lalai kepada 2. |
data-layout | grid, 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-offset | Bilangan 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-partner | ID 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. |
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.
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.
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.succeeded | Pembayaran disahkan. |
payment.refunded | Pembayaran balik telah dilaksanakan. |
ad.activated | Iklan menjadi aktif secara automatik atau selepas semakan pentadbir. |
invoice.issued | Sebuah invois telah dikeluarkan. |
referral.payout.completed | Komisen rujukan mencapai status dibayar. |
referral.payout.failed | Batch pembayaran rujukan gagal di penyedia — pendapatan dikembalikan ke dalam akaun terhutang dan dicuba semula. |
rank.changed | Peringkat iklan berubah — termasuk apabila pembayaran pengiklan lain menyebabkannya. |
ad.expiring_soon | 30, 7, atau 1 hari sebelum iklan tamat tempoh. |
partner_ad_revenue.payout.completed | Bayaran kongsi hasil iklan mencapai status dibayar. |
partner_ad_revenue.payout.failed | Sekumpulan pembayaran perkongsian hasil iklan gagal di penyedia — saham dikembalikan ke dalam akaun terhutang dan dicuba semula. |
SDK rasmi JavaScript/TypeScript dan Python, yang dijana daripada spesifikasi API yang sama ini, dirancang tetapi belum diterbitkan — sehingga itu, panggil terus API HTTP.
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": "...",
},
)