Annual Ads

Dokumentaro por programisto

Konstruu rekte sur la platformo Annual Ads — kreu reklamantojn, publikigu reklamojn, iniciatu pagojn kaj spuru rangon, tute per la API.

Vidu la plenan prezotabelon

Vi konservas 70%-on. de tio, kion viaj reklamantoj en la Konekta reĝimo pagas por siaj reklamoj — aŭtomate pagite al via monujo. Vidu sube, kiel ĝi funkcias.

Baza URL

https://api.adhub365.com
OpenAPI 3

Aŭtentigo

Ĉiu peto estas aŭtentigita per sekreta ŝlosilo en la aŭtoriza kaplinio, uzante la Bearer-skemon.

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

Sandkesto kaj produktado

Sandbox-ŝlosiloj kaj produktaj ŝlosiloj estas plene izolitaj unu de la alia — sandbox-ŝlosilo neniam povas legi aŭ skribi datumojn kreitajn de produkta ŝlosilo, kaj inverse.

Celiloj

Ĉiu ŝlosilo estas limigita al la ampleksoj, kun kiuj ĝi estis eldonita — ŝlosilo neniam havas pli da aliro ol la partnera konto, kiu ĝin kreis.

API-ŝlosiloj estas eldonitaj al aprobitaj partneraj kontoj de la Jara Reklamteamo.

Kreu partneran konton

Revenu-dividado en reklamado

Se viaj API-ŝlosiloj kreas reklamanto-kontojn por viaj propraj uzantoj (Konekta reĝimo — vidu Aŭtentikigon supre), vi gajnas parton de tio, kion tiuj reklamantoj pagas por siaj anoncoj. La suba disdono estas legata vive de ĉi tiu sama finpunkto, neniam fikskodita, kaj tute aparta de la referenca komisiono pli malsupre sur ĉi tiu paĝo.

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

70%

Validas por vi

Aŭtomate pagite al via agordita elpaga monujo — ne necesas peti elprenon.

30%

Iras al la ĉiujaraj anoncoj

Prizorgas moderadon, gastigon kaj la rangigan infrastrukturon, sur kiu funkcias viaj anoncoj.

Kiel ĝi funkcias

  1. Unu el viaj Connect-reklamantoj pagas por anonco per via integriĝo.
  2. La anonco estas reviziita kaj aprobita — aŭtomate, aŭ de nia moderiga teamo.
  3. Via parto estas en la vico por aŭtomata pago al via monujo, la sama mekanismo kiel en la suba referenca programo.
Parto neniam estas kreita antaŭ ol la anonco efektive estas aprobita — se moderado ĝin malakceptas, pri tiu pago nenio estas ŝuldata. Suplemento al jam aktiva anonco ne portas tian riskon kaj estas tuj dividita.

Pagokondiĉoj

  • Kripta elpaga monujo estas agordita en via partnera konto.
  • Ne necesas KYC de via flanko — via partnera konto jam estis kontrolita ĉe ĝia kreo.

Ekzemplo: legado de akumulitaj partoj

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
}

Finpunktoj

Kontoj

POST/v1/partner/advertisers

Kreu reklamantan konton nome de unu el viaj uzantoj (Konekta reĝimo).

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

Serĉu reklamantan konton kreitan de ĉi tiu partnero.

advertisers:read

Reklamoj

POST/v1/partner/ads

Kreu anoncon. Ĝi komenciĝas en skiza stato. La laŭvolaj kampoj advertiser_type, promotion_type, link_type kaj promoted_brand priskribas filian, referencan, kreintan aŭ individuan reklamadon — vidu la noton sube.

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

Serĉu anoncon.

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

Ĝisdatigu la redaktan enhavon — titolo, priskribo, ligilo, reklamanto-tipo, promocio-tipo, ligilo-tipo kaj promociita marko. Kategorio, geografio kaj ĉio, kion la rangiga motoro legas, ĉi tie neniam povas esti ŝanĝita.

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

Alŝutu reklaman bildon rekte (JPEG/PNG/WebP, maksimume 5 MB). Necesas antaŭ la unua pago — vidu la paggrupon sube.

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

Agordu la bildon de anonco per URL anstataŭ alŝuti dosieron — la servilo mem elprenas kaj gastigas ĝin. Sama postulo: necesas antaŭ la unua pago.

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

Nuna rango, kategorio kaj geografia amplekso por anonco.

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

La totalaj vidoj kaj klakoj de anonco — la nombro da pasintaj/restantaj tagoj devenas de la kampoj activated_at kaj expires_at jam haveblaj per GET /{id}, kaj la rango devenas de GET /{id}/rank.

ads:read

Pagoj

POST/v1/partner/payments

Komencu kriptopagon por komenca aĉeto aŭ por replenigo. Komenca pago malsukcesas kun 422, krom se la anonco jam havas bildon — vidu uploadAdImage/setAdImageUrl supre.

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

Kontrolu la staton de pago.

payments:read

Referencoj

POST/v1/partner/referrals

Kreu referencan ligilon.

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

Kumulaj referencaj enspezoj, disigitaj laŭ statuso.

referrals:read

Revenu-dividado en reklamado

GET/v1/partner/ad-revenue/earnings

Via 70%-a parto de tio, kion la reklamantoj, kiujn vi kreis en Konekta reĝimo, pagis por siaj anoncoj, disigita laŭ statuso.

ad-revenue:read

Aliro-registro

GET/v1/partner/access-log

Kompleta vokhistorio por ĉi tiu ŝlosilo — metodo, vojo, IP-adreso, tempostampo.

Tie

Publika finpunktoj

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

Nur-legada rangigo por kategorio kaj geografia amplekso.

Publika
GET/v1/tiers

La 7 agorditaj prezniveloj (sojlo, malŝlositaj avantaĝoj).

Publika
GET/v1/referral-program

La komisionaj procentoj nuntempe aktivaj por la referenca kaskado kaj la gvidantaro-poto.

Publika
GET/v1/partner-program

La nuna disdono de reklamenspezoj (Konekta reĝimo) inter vi kaj Annual Ads.

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

Serĉo en natura lingvo — direktas demandon kiel "meblo-reklamantoj en Kenjo" al la kongrua kategorio kaj geografia amplekso, poste redonas tiun rangigon en ĝia preciza reala ordo.

Publika

Afilia kaj referenca reklamado

advertiser_type, promotion_type, link_type, kaj promoted_brand estas opciaj kampoj en POST kaj PATCH /v1/partner/ads — Annual Ads ne limiĝas al entreprenoj, kiuj reklamas sin mem. Kiam link_type estas affiliate_link aŭ referral_invitation_link, aŭ promotion_type estas affiliate_offer aŭ referral_opportunity, affiliate_terms_accepted devas esti vera, alie la peto estas malakceptita per 422. La titolo estas limigita al 35 signoj kaj la priskribo al 80 — ambaŭ limigoj estas devigataj servilflanke, ne nur en la uzantinterfaco de la panelo.

Ilatoj de artefarita inteligenteco

Ĉiu reklamanta konto ricevas aron da enkonstruitaj AI-iloj — generilon de reklamaj enhavoj kaj vidaj elementoj, konversacian asistanton, buĝetan konsiliston kaj eksteran SEO-revizoron — pagatajn per AI-kreditoj krom la fiksa jara kotizo.

Ili estas efektivigitaj per la ensaluto de la propra kontrolpanelo de la reklamanto (sesia alirtokeno), ne per partnera API-ŝlosilo — triapartia integriĝo ne povas voki ilin nome de la reklamanto.
POST/v1/advertisers/{id}/ai/assistant

Ask Annual Ads — flosanta konversacia asistanto, nur informativa, nur legenda pri konto-datumoj.

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

Generu reklamotitolon, priskribon kaj ŝlosilvortojn el mallonga komerca priskribo.

2 kredito(j)
POST/v1/advertisers/{id}/ai/creative-studio/image

Kreu listigan bildon (PNG) el la sama komerca priskribo, gastigitan kaj pretan por aldoni al anonco.

8 kredito(j)
POST/v1/advertisers/{id}/ai/budget-advisor

Vera statistika projekcio — neniam generativa supozo — de la probabloj konservi donitan rangon je 30/90/365 tagoj.

1 kredito(j)
POST/v1/advertisers/{id}/ai/seo-audit

Analizu la propran eksteran retejon de la reklamanto kaj proponu konkretajn SEO-plibonigojn.

2 kredito(j)

Ekzemplo — generi reklaman enhavon

La sama kategorio kaj komerca priskribo ankaŭ funkciigas la bildogeneratoron sube.

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
}

Kreu kongruan vidigilon por la sama reklamo:

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
}

Gadĝeto

Metu pretfaran reklaman unuon sur vian propran retejon — sen konstrua paŝo, sen iframe. La skripto redonas sin rekte en la paĝo ene de izolita Shadow DOM, do ĝiaj stiloj neniam likas en vian retejon, kaj la stiloj de via retejo neniam likas en ĝin.

Aldonu ĝin al via paĝo

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

Defaŭlte ĉi tio montras la plenan publikan rangigon de la kategorio — ĉiun reklamanton sur la platformo, ne nur tiujn, kiujn vi alportis. Por montri nur la anoncojn de reklamantoj, kiujn vi kreis per la konekta reĝimo (tiuj, kiuj generas vian parton), aldonu data-partner kun via partnera ID (trovu ĝin sur la disvolvantoj-paĝo de via propra panelo):

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

Se viaj reklamantoj etendiĝas tra pluraj kategorioj, forigu tute la atributon data-category — kun nur data-partner la videto montras ĉiujn viajn reklamojn tra ĉiuj kategorioj en unu krado, anstataŭ bezoni po unu videtan blokon por ĉiu kategorio:

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

Ĉu vi volas piedlinian unuon apud via enhava unu, ĉiu montranta malsamajn reklamojn? Aldonu duan vidjetblokon kun data-layout="compact" (unu reklamo, kunpremebla en malgrandan pilolon) kaj data-offset agordita al kiom da reklamoj via unua vidjeto jam montras:

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

Atributoj

data-categoryID de kategorio por montri. Postulata — krom se data-partner estas agordita; tiam ĝia forigo montras la anoncojn de tiu partnero en ĉiuj kategorioj.
data-geoGeografia amplekso: loka, regiona aŭ tutmonda. Defaŭlte tutmonda.
data-countNombro de anoncoj por montri. La defaŭlto estas 4.
data-columnsNombro de kradkolumnoj. La defaŭlto estas 2.
data-layoutkrado, listo aŭ kompakta. La defaŭlto estas krado. Kompakta montras unu reklamon (data-count estas ignorata) kun butono por kunpremi ĝin en malgrandan pilolon kaj reestigi ĝin — unuo en piedlinia stilo, neniam fikse poziciigita de la skripto mem; vi mem metas kaj stiligas la konteneran div-elementon laŭplaĉe sur via propra paĝo.
data-offsetNombro de plej alte rangitaj anoncoj por preterlasi. La defaŭlta valoro estas 0. Permesas al dua vidigilo sur la sama paĝo (ekz. kompakta en la piedlinio kaj krada pli supre) montri malsamajn anoncojn anstataŭ duoble ripeti la saman — pasigu la nombron de anoncoj, kiujn la alia vidigilo jam montras.
data-partnerVia partnera ID (trovu ĝin en la programistopaĝo de via propra instrumentpanelo). Ne deviga — sen ĝi la videto montras la plenan publikan rangon por tiu kategorio, ĉiun reklamanton sur la platformo. Kun ĝi, nur anoncoj de reklamantoj, kiujn vi alportis per la Connect-reĝimo — tiuj, kiuj efektive generas vian parton.

Enspezo-dividado

Kiel la komisiono pro refero de partnero fakte atingas ilin — la procento, la pagmekanismo kaj la antaŭkondiĉoj.

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
}

Ne fiksita nombro

La komisionprocento estas agordita ĉe ni kaj povas ŝanĝiĝi — ĉiam legu ĝin rekte de ĉi tiu API-punkto anstataŭ fikskodi valoron.

Plene aŭtomata

Ne ekzistas eltira finpunkto. Planita tasko generas pagindajn enspezojn, grupigas ilin laŭ reklamanto, kaj aŭtomate pagas ilin post kiam ĉiuj subaj kondiĉoj estas plenumitaj.

Pagokondiĉoj

  • La totalaj pagendaj enspezoj de la reklamanto atingas la minimuman pagsumon.
  • Kripta pagosako estas agordita en ilia konto.
  • Ilia KYC-statuso estas konfirmita.

Ekzemplo: legado de akumulitaj enspezoj

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
}

Prezniveloj (aktiva)

Legu rekte de ĉi tiu finpunkto — neniam fikskodigu ĉi tiujn valorojn, ili povas ŝanĝiĝi ĉe nia flanko. Konstruu nivel-elektilon por viaj propraj uzantoj anstataŭ kampo por libera sumo: ĉiu montrata prezo jam estas la preciza sumo sendota kiam oni kreas la pagon, kaj la ĉi tie montrataj malŝlositaj avantaĝoj precize informas uzantojn, kion tiu prezo al ili donas, tiel ke ili elektas prezon, kiun ili komprenas, anstataŭ diveni nombron.

NiveloPrezoMalŝlosas
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Klakebla ligilo
Gold$500.00

Animation unlocked

Klakebla ligiloAnimacio
Platinum$1,000.00

Enhanced exposure

Klakebla ligiloAnimacio
Diamond$2,500.00

Premium placement

Klakebla ligiloAnimacio
Elite$5,000.00

Top-tier visibility

Klakebla ligiloAnimacio
Legendary$10,000.00

Maximum visibility & branding

Klakebla ligiloAnimacio

Tarifaj limoj

Petooj estas limigitaj per ŝlosilo je minuto. Ĉiu aŭtentigita respondo portas la kapliniojn X-RateLimit-Limit, X-RateLimit-Remaining kaj X-RateLimit-Reset; superi la limon redonas 429 Tro Multaj Petooj kun la kaplinio Retry-After.

IP-permeslisto

Laŭvola, por ĉiu partnero. Ĝis vi aldonos eniron, viaj ŝlosiloj akceptas petojn de iu ajn IP-adreso — la unua eniro ŝanĝas ĉiujn ŝlosilojn de tiu partnero al nur-permeslisto.

Retkroĉoj

Ĉiu webhook estas subskribita per HMAC-SHA256 uzante sekretejon eldonitan unufoje ĉe ĝia kreo — kontrolu la subskribon antaŭ ol fidi la ŝarĝaĵon. Eventoj estas liverataj nur al la partnero, kiu posedas la rilatan reklamanton.

payment.succeededPago estas konfirmita.
payment.refundedRepago estas efektivigita.
ad.activatedReklamo aktiviĝas aŭtomate aŭ post administra revizio.
invoice.issuedFakturo estas eldonita.
referral.payout.completedReferenca komisiono atingas pagitan staton.
referral.payout.failedSerio de referencaj pagoj malsukcesas ĉe la provizanto — enspezoj revenas al pagenda kaj estas re-provataj.
rank.changedLa rango de anonco ŝanĝiĝas — inkluzive kiam pago de alia reklamanto kaŭzas ĝin.
ad.expiring_soon30, 7 aŭ 1 tago(j) antaŭ ol anonco eksvalidiĝas.
partner_ad_revenue.payout.completedPagado de enspezdividado de reklamoj atingas pagitan staton.
partner_ad_revenue.payout.failedPago-aro de enspezdividado de reklamoj malsukcesas ĉe la provizanto — la partoj revenas al pagenda kaj estas re-provataj.

Programara disvolvada ilaro

Oficialaj JavaScript-/TypeScript- kaj Python-SDK-oj, generitaj el ĉi tiu sama API-specifo, estas planitaj sed ankoraŭ ne publikigitaj — ĝis tiam alvoku la HTTP-API-n rekte.

Rapida komenco

Ankoraŭ ne ekzistas SDK — ĉi tiuj vokas la HTTP-API-on rekte kaj hodiaŭ funkcias en ajna lingvo.

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