Annual Ads

Dokumentasyon ng developer

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 presyo

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

Batayang URL

https://api.adhub365.com
OpenAPI 3

Pagpapatunay ng pagkakakilanlan

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

Sandbox at produksyon

Ang mga sandbox key at production key ay ganap na nakahiwalay sa isa't isa — hindi kailanman makababasa o makakasulat ang isang sandbox key ng datos na nilikha ng production key, at gayundin naman.

Mga saklaw

Ang bawat susi ay limitado sa mga saklaw na inilabas ito — hindi kailanman nagkakaroon ng mas malawak na access ang susi kaysa sa partner account na lumikha nito.

Ang mga API key ay inilalabas sa mga aprubadong partner account ng Annual Ads team.

Gumawa ng account ng kasosyo

Pagbabahagi ng kita sa patalastas

Kung ang iyong mga API key ay lumilikha ng mga advertiser account para sa iyong sariling mga user (Connect mode — tingnan ang Authentication sa itaas), makakakuha ka ng bahagi ng babayaran ng mga advertiser na iyon para sa kanilang mga ad. Ang split sa ibaba ay nababasa nang live mula sa parehong endpoint na ito, hindi kailanman naka-hardcode, at ganap na hiwalay sa referral commission na makikita pa sa ibaba ng pahinang ito.

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

70%

Ito ay para sa iyo

Awtomatikong ibinabayad sa iyong naka-configure na payout wallet — hindi na kailangan ng kahilingan para sa pag-withdraw.

30%

Pumunta sa Taunang Mga Patalastas

Sumasaklaw sa moderasyon, pagho-host, at imprastruktura ng pagraranggo na pinagpapatakbuhan ng iyong mga ad.

Paano ito gumagana

  1. Isa sa iyong mga advertiser sa Connect mode ang nagbabayad para sa isang ad sa pamamagitan ng iyong integrasyon.
  2. Sinusuri at inaprubahan ang patalastas — awtomatiko, o ng aming koponang nagmo-moderate.
  3. Ang bahagi mo ay naka-pila para sa awtomatikong pagbabayad sa iyong pitaka, parehong mekanismo tulad ng referral program sa ibaba.
Hindi nalilikha ang bahagi hangga't hindi pa naaprubahan ang ad — kung tatanggihan ito ng moderasyon, walang babayaran para sa bayad na iyon. Ang pagdagdag ng pondo sa isang ad na aktibo na ay walang ganoong panganib at agad na nahahati.

Mga kundisyon ng bayad

  • Isang crypto payout wallet ang naka-configure sa iyong partner account.
  • Hindi kailangan ng KYC sa iyong bahagi — ang iyong partner account ay na-verify na nang likhain ito.

Halimbawa: pagbabasa ng naipong mga bahagi

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
}

Mga puntong wakas

Mga Akawnt

POST/v1/partner/advertisers

Gumawa 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

Mga patalastas

POST/v1/partner/ads

Gumawa 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}/image

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

Itakda 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}/rank

Kasalukuyang ranggo, kategorya, at saklaw na heograpikal para sa isang patalastas.

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

Ang 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

Mga bayad

POST/v1/partner/payments

Simulan 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

Mga reperensiya

POST/v1/partner/referrals

Gumawa ng referral link.

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

Kabuuang kinita sa referral, na hinati ayon sa katayuan.

referrals:read

Pagbabahagi ng kita sa patalastas

GET/v1/partner/ad-revenue/earnings

Ang 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

Tala ng pag-access

GET/v1/partner/access-log

Kompletong kasaysayan ng tawag para sa susi na ito — pamamaraan, landas, IP, timestamp.

Doon

Mga pampublikong endpoint

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

Ranggo na basahin lamang para sa kategorya at saklaw na heograpikal.

Pampubliko
GET/v1/tiers

Ang 7 na naka-configure na antas ng presyo (pagtatalo, mga nakapagbukas na benepisyo).

Pampubliko
GET/v1/referral-program

Ang mga porsyento ng komisyon na kasalukuyang aktibo para sa referral cascade at Leaders Pool.

Pampubliko
GET/v1/partner-program

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

Mga Kasangkapan sa AI

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.

Ang mga ito ay tumatakbo sa pamamagitan ng pag-login sa dashboard ng advertiser (isang session access token), hindi sa pamamagitan ng partner API key — hindi maaaring tawagin ang mga ito ng third-party integration sa ngalan ng advertiser.
POST/v1/advertisers/{id}/ai/assistant

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

Gumawa 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/image

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

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

Suriin ang panlabas na website ng nag-a-advertise at magmungkahi ng mga konkretong pagpapabuti sa SEO.

2 kredito(s)

Halimbawa — gumawa ng nilalaman ng patalastas

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
}

Widget

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.

Idagdag ito sa iyong pahina

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

Mga Katangian

data-categoryID 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-geoSaklaw ng heograpiya: lokal, rehiyonal, o pandaigdig. Ang default ay pandaigdig.
data-countBilang ng mga patalastas na ipapakita. Ang default ay 4.
data-columnsBilang ng mga kolum ng grid. Ang default ay 2.
data-layoutgrid, 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-offsetBilang 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-partnerAng 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.

Pagbahagi ng kita

Paano talaga nakakarating sa isang partner ang komisyon mula sa referral — ang porsyento, ang mekanismo ng pagbabayad, at ang mga paunang kundisyon.

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
}

Hindi isang nakapirming bilang

Ang porsyento ng komisyon ay naka-configure sa aming panig at maaaring magbago — palaging basahin ito nang live mula sa endpoint na ito sa halip na mag-hardcode ng halaga.

Ganap na awtomatiko

Walang itinakdang hangganan sa pag-withdraw. Ang isang naka-iskedyul na trabaho ay nagpoproseso ng mga kinita na nababayaran, pinagsasama-sama ang mga ito ayon sa bawat advertiser, at awtomatikong nagbabayad kapag natugunan na ang lahat ng sumusunod na kundisyon.

Mga kundisyon ng bayad

  • Umabot na sa pinakamababang halagang babayaran ang kabuuang kikitain ng nag-aanunsyo.
  • May naka-configure na crypto payout wallet sa kanilang account.
  • Napatunayan na ang kanilang KYC status.

Halimbawa: pagbabasa ng naipong kita

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
}

Mga antas ng presyo (live)

Magbasa nang live mula sa endpoint na ito — huwag kailanman i-hardcode ang mga halagang ito, maaari silang magbago sa aming panig. Gumawa ng tagapili ng antas para sa iyong mga gumagamit sa halip na patlang para sa libreng halaga: ang bawat presyong ipinapakita ay eksaktong halagang ipapadala kapag gumagawa ng bayad, at ang mga benepisyong nakalock na ipinapakita rito ay nagsasabi sa mga gumagamit kung ano ang makukuha nila sa presyong iyon, kaya pinipili nila ang presyong nauunawaan nila sa halip na hulaan ang isang numero.

AntasPresyoPagbubukas ng mga kandado
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Maaaring i-click na link
Gold$500.00

Animation unlocked

Maaaring i-click na linkAnimasyon
Platinum$1,000.00

Enhanced exposure

Maaaring i-click na linkAnimasyon
Diamond$2,500.00

Premium placement

Maaaring i-click na linkAnimasyon
Elite$5,000.00

Top-tier visibility

Maaaring i-click na linkAnimasyon
Legendary$10,000.00

Maximum visibility & branding

Maaaring i-click na linkAnimasyon

Mga limitasyon sa bilis

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.

IP pahintulot na listahan

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.

Mga webhook

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.succeededKumpirmado na ang bayad.
payment.refundedIsinasagawa ang pagbabalik ng bayad.
ad.activatedNagiging aktibo ang isang ad nang awtomatiko o pagkatapos ng pagsusuri ng admin.
invoice.issuedIsang invoice ang inilabas.
referral.payout.completedNakarating sa bayad na katayuan ang komisyon sa referral.
referral.payout.failedNabigo ang batch ng bayad sa referral sa provider — bumabalik ang kita sa payable at muling sinusubukan.
rank.changedNagbabago ang ranggo ng isang patalastas — kabilang kapag sanhi ito ng bayad ng ibang advertiser.
ad.expiring_soon30, 7, o 1 araw bago mag-expire ang isang ad.
partner_ad_revenue.payout.completedNakarating sa bayad na katayuan ang pagbabayad ng ad revenue share.
partner_ad_revenue.payout.failedNabigo ang batch ng payout ng ad revenue share sa provider — bumabalik ang mga share sa payable at muling sinusubukan.

Mga Kagamitang Pang-pag-unlad ng Software

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.

Mabilis na Simula

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