Magbuo nang direkta sa Annual Ads platform — lumikha ng mga advertiser, maglathala ng mga ad, i-trigger ang mga bayad, at subaybayan ang ranggo, lahat sa pamamagitan ng API.
Tingnan ang buong grid ng presyoPinapanatili mo ang 70% ng bayad para sa mga ad ng iyong mga advertiser sa Connect mode — awtomatikong napupunta sa iyong pitaka. Tingnan kung paano ito gumagana sa ibaba.
Ang bawat kahilingan ay pinapatotohanan gamit ang isang lihim na susi sa Authorization header, gamit ang Bearer na iskema.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAng mga API key ay inilalabas sa mga aprubadong partner account ng Annual Ads team.
Gumawa ng account ng kasosyo| POST | /v1/partner/advertisersGumawa ng account ng advertiser sa ngalan ng isa sa iyong mga gumagamit (mode na Connect). | advertisers:write |
| GET | /v1/partner/advertisers/{id}Hanapin ang account ng advertiser na nilikha ng kasosyong ito. | advertisers:read |
| POST | /v1/partner/adsGumawa ng isang ad. Nasa status ng draft ito sa simula. Ang mga opsyonal na patlang na advertiser_type, promotion_type, link_type, at promoted_brand ay naglalarawan ng affiliate, referral, creator, o indibidwal na pag-aanunsiyo — tingnan ang tala sa ibaba. | ads:write |
| GET | /v1/partner/ads/{id}Hanapin ang isang patalastas. | ads:read |
| PATCH | /v1/partner/ads/{id}I-update ang nilalaman ng editoryal — pamagat, paglalarawan, link, uri ng advertiser, uri ng promosyon, uri ng link, at itinataguyod na tatak. Hindi kailanman maaaring baguhin dito ang kategorya, heograpiya, at anumang babasahin ng ranking engine. | ads:write |
| POST | /v1/partner/ads/{id}/imageMag-upload ng larawan ng ad nang direkta (JPEG/PNG/WebP, 5 MB ang pinakamalaki). Kinakailangan bago ang unang bayad — tingnan ang grupo ng mga bayad sa ibaba. | ads:write |
| POST | /v1/partner/ads/{id}/image-urlItakda ang imahe ng ad mula sa isang URL sa halip na mag-upload ng file — ang server mismo ang kukuha at magre-rehost nito. Parehong kinakailangan: kailangan bago ang unang bayad. | ads:write |
| GET | /v1/partner/ads/{id}/rankKasalukuyang ranggo, kategorya, at saklaw na heograpikal para sa isang patalastas. | ads:read |
| GET | /v1/partner/ads/{id}/statsAng kabuuang bilang ng pagtingin at pag-click sa isang ad — ang bilang ng araw na lumipas/natitira ay nagmumula sa mga patlang na activated_at/expires_at na nasa GET /{id}, at ang ranggo ay mula sa GET /{id}/rank. | ads:read |
| POST | /v1/partner/paymentsSimulan ang crypto na bayad para sa paunang pagbili o pag-top up. Nabibigo ang paunang bayad sa error na 422 maliban kung mayroon nang larawan ang ad — tingnan ang uploadAdImage/setAdImageUrl sa itaas. | payments:write |
| GET | /v1/partner/payments/{id}I-check ang status ng bayad. | payments:read |
| POST | /v1/partner/referralsGumawa ng referral link. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsKabuuang kinita sa referral, na hinati ayon sa katayuan. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsAng iyong 70% na bahagi ng binayaran ng mga advertiser na nilikha mo sa Connect mode para sa kanilang mga ad, na hinati ayon sa status. | ad-revenue:read |
| GET | /v1/partner/access-logKompletong kasaysayan ng tawag para sa susi na ito — pamamaraan, landas, IP, timestamp. | Doon |
| GET | /v1/rankings?category={id}&geo={scope}Ranggo na basahin lamang para sa kategorya at saklaw na heograpikal. | Pampubliko |
| GET | /v1/tiersAng 7 na naka-configure na antas ng presyo (pagtatalo, mga nakapagbukas na benepisyo). | Pampubliko |
| GET | /v1/referral-programAng mga porsyento ng komisyon na kasalukuyang aktibo para sa referral cascade at Leaders Pool. | Pampubliko |
| GET | /v1/partner-programAng kasalukuyang paghahati ng kita sa patalastas (Connect mode) sa pagitan mo at ng Annual Ads. | Pampubliko |
| GET | /v1/search?q={query}Paghahanap sa natural na wika — ina-ruta ang isang tanong tulad ng "mga nag-a-advertise ng muwebles sa Kenya" sa katugmang kategorya at saklaw na heograpikal, pagkatapos ay ibinabalik ang ranggo nito sa eksaktong tunay na pagkakasunod-sunod. | Pampubliko |
Pagsasulong ng kaakibat at pagre-refer
advertiser_type, promotion_type, link_type, at promoted_brand ay mga opsyonal na patlang sa POST at PATCH /v1/partner/ads — Ang Annual Ads ay hindi limitado sa mga negosyong nag-aanunsyo para sa kanilang sarili. Kapag ang link_type ay affiliate_link o referral_invitation_link, o ang promotion_type ay affiliate_offer o referral_opportunity, dapat totoo ang affiliate_terms_accepted; kung hindi, tatanggihan ang kahilingan na may status code na 422. Ang title ay limitado sa 35 karakter at ang description sa 80 — pareho itong ipinapatupad sa server-side, hindi lamang sa dashboard UI.
Bawat account ng advertiser ay may kasamang hanay ng built-in na AI tools — isang tagabuo ng nilalaman at visual para sa ad, isang conversational assistant, isang tagapayo sa badyet, at isang panlabas na SEO auditor — na binabayaran gamit ang AI credits, bukod pa sa nakapirming taunang presyo.
| POST | /v1/advertisers/{id}/ai/assistantAsk Annual Ads — isang lumulutang na katulong sa pag-uusap, para sa impormasyon lamang, basahin lamang ang datos ng account. | Pampubliko |
| POST | /v1/advertisers/{id}/ai/creative-studioGumawa ng pamagat ng ad, paglalarawan, at mga keyword mula sa isang maikling paglalarawan ng negosyo. | 2 kredito(s) |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageGumawa ng isang visual na listahan (PNG) mula sa parehong paglalarawan ng negosyo, naka-host at handang ikabit sa isang ad. | 8 kredito(s) |
| POST | /v1/advertisers/{id}/ai/budget-advisorIsang tunay na estadistikal na pagtataya — hindi kailanman haka-haka na panggenerasyon — ng posibilidad na mapanatili ang isang partikular na ranggo sa 30/90/365 araw. | 1 kredito(s) |
| POST | /v1/advertisers/{id}/ai/seo-auditSuriin ang panlabas na website ng nag-a-advertise at magmungkahi ng mga konkretong pagpapabuti sa SEO. | 2 kredito(s) |
Ang parehong kategorya at paglalarawan ng negosyo ay nagpapatakbo rin sa tagabuo ng larawan sa ibaba.
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
}Gumawa ng katugmang visual para sa parehong patalastas:
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
}I-drop ang isang handang-gamitin na ad unit sa iyong sariling site — walang hakbang sa pagbuo, walang iframe. Ang script ay direktang nagre-render sa pahina sa loob ng isang hiwalay na Shadow DOM, kaya hindi kailanman nakakalusot ang mga estilo nito sa iyong site, at hindi rin nakakalusot ang mga estilo ng iyong site dito.
<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>Sa default, ipinapakita nito ang buong pampublikong ranggo para sa kategorya — bawat advertiser sa platform, hindi lang yung mga dinala mo. Para ipakita lamang ang mga ad mula sa mga advertiser na nilikha mo sa pamamagitan ng Connect mode (yung mga nagbibigay ng iyong bahagi), idagdag ang data-partner kasama ang iyong partner ID (hanapin ito sa Developers page ng iyong sariling dashboard):
<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>Kung ang iyong mga advertiser ay sumasaklaw sa ilang kategorya, alisin nang buo ang data-category — gamit lamang ang data-partner, ipapakita ng widget ang bawat isa sa iyong mga ad sa lahat ng kategorya sa isang grid, sa halip na kailanganin ng isang widget block para sa bawat kategorya:
<div
class="annualads-widget"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>Gusto mo bang magkaroon ng yunit na naka-footer sa tabi ng yunit sa loob ng nilalaman, na bawat isa ay nagpapakita ng iba't ibang ad? Magdagdag ng pangalawang widget block na may data-layout="compact" (isang ad na maaaring i-collapse sa maliit na pill) at itakda ang data-offset ayon sa kung ilang ad na ang ipinapakita ng unang widget mo:
<!-- 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 ng kategorya na ipapakita. Kinakailangan — maliban kung nakatakda ang data-partner, sa kasong iyon, ang hindi paglalagay nito ay magpapakita ng mga ad ng partner sa bawat kategorya. |
data-geo | Saklaw ng heograpiya: lokal, rehiyonal, o pandaigdig. Ang default ay pandaigdig. |
data-count | Bilang ng mga patalastas na ipapakita. Ang default ay 4. |
data-columns | Bilang ng mga kolum ng grid. Ang default ay 2. |
data-layout | grid, list, o compact. Ang default ay grid. Ang compact ay nagpapakita ng isang ad (hindi pinapansin ang data-count) na may button para itupi ito sa isang maliit na pill at ibalik — isang yunit na parang footer, hindi kailanman itinakda bilang fixed ng script mismo; ikaw ang maglalagay at magsi-style ng container div ayon sa gusto mo sa sarili mong pahina. |
data-offset | Bilang ng mga patalastas na nangunguna sa ranggo na laktawan. Default na 0. Pinapayagan ang pangalawang widget sa parehong pahina (hal. isang compact sa footer at isang grid sa mas mataas na bahagi) na magpakita ng iba't ibang patalastas sa halip na ulitin ang parehong patalastas nang dalawang beses — ipasa ang bilang ng mga patalastas na ipinapakita na ng kabilang widget. |
data-partner | Ang iyong partner ID (hanapin ito sa pahina ng Developers sa iyong dashboard). Opsyonal — kung wala ito, ipapakita ng widget ang buong pampublikong ranggo para sa kategoryang iyon, lahat ng advertiser sa platform. Kung nandiyan ito, mga ad lamang mula sa mga advertiser na dinala mo sa pamamagitan ng Connect mode — ang mga talagang nagbubunga ng iyong bahagi. |
Limitado ang mga kahilingan kada susi, kada minuto. Bawat na-authenticate na tugon ay may kasamang mga header na X-RateLimit-Limit, X-RateLimit-Remaining, at X-RateLimit-Reset; kapag nalampasan ang limitasyon, magbabalik ito ng 429 Too Many Requests na may Retry-After header.
Opsyonal, bawat kasosyo. Hanggang hindi ka pa nagdaragdag ng entry, tinatanggap ng iyong mga susi ang mga kahilingan mula sa anumang IP — ang unang entry ay magpapalipat sa lahat ng susi ng kasosyong iyon sa allowlist-only.
Bawat webhook ay nilagdaan gamit ang HMAC-SHA256 sa pamamagitan ng isang lihim na inilabas nang isang beses sa oras ng paglikha — suriin ang lagda bago magtiwala sa payload. Ang mga kaganapan ay ipinapadala lamang sa kasosyong nagmamay-ari ng kaugnay na advertiser.
payment.succeeded | Kumpirmado na ang bayad. |
payment.refunded | Isinasagawa ang pagbabalik ng bayad. |
ad.activated | Nagiging aktibo ang isang ad nang awtomatiko o pagkatapos ng pagsusuri ng admin. |
invoice.issued | Isang invoice ang inilabas. |
referral.payout.completed | Nakarating sa bayad na katayuan ang komisyon sa referral. |
referral.payout.failed | Nabigo ang batch ng bayad sa referral sa provider — bumabalik ang kita sa payable at muling sinusubukan. |
rank.changed | Nagbabago ang ranggo ng isang patalastas — kabilang kapag sanhi ito ng bayad ng ibang advertiser. |
ad.expiring_soon | 30, 7, o 1 araw bago mag-expire ang isang ad. |
partner_ad_revenue.payout.completed | Nakarating sa bayad na katayuan ang pagbabayad ng ad revenue share. |
partner_ad_revenue.payout.failed | Nabigo ang batch ng payout ng ad revenue share sa provider — bumabalik ang mga share sa payable at muling sinusubukan. |
Ang opisyal na JavaScript/TypeScript at Python SDKs, na nabuo mula sa parehong espesipikasyon ng API na ito, ay pinaplano ngunit hindi pa nailalathala — tawagan nang direkta ang HTTP API hanggang sa mailathala ang mga ito.
Walang SDK pa — direktang tinatawag nila ang HTTP API at gumagana na ngayon sa anumang wika.
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": "...",
},
)