Annual Ads

Dokumentacija za razvijalce

Razvijajte neposredno na platformi Annual Ads – ustvarjajte oglaševalce, objavljajte oglase, sprožajte plačila in spremljajte uvrstitev, vse to prek API-ja.

Oglejte si celotno cenik

Ohranite 70 % od zneska, ki ga oglaševalci v načinu »Connect« plačajo za svoje oglase – denar se samodejno nakaže v vašo denarnico. Spodaj si oglejte, kako to deluje.

Osnovni URL

https://api.adhub365.com
OpenAPI 3

Preverjanje pristnosti

Vsako zahtevo se avtentificira s skrivnim ključem v glavi »Authorization« po shemi »Bearer«.

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

Testno okolje in produkcijsko okolje

Ključi za testno okolje in produkcijsko okolje so med seboj popolnoma ločeni — ključ za testno okolje nikoli ne more brati ali zapisovati podatkov, ki jih je ustvaril ključ za produkcijsko okolje, in obratno.

Področja uporabe

Vsak ključ je omejen na področja, za katera je bil izdan – ključ nikoli nima širšega dostopa kot partnerski račun, ki ga je ustvaril.

API-ključe odobrenim partnerskim računom izda ekipa Annual Ads.

Ustvarite partnerski račun

Delitev prihodkov iz oglaševanja

Če vaši API-ključi ustvarjajo oglaševalske račune za vaše lastne uporabnike (način »Connect« – glej »Preverjanje pristnosti« zgoraj), prejmete delež od zneska, ki ga ti oglaševalci plačajo za svoje oglase. Spodaj navedeni delež se v realnem času bere iz istega končnega točke, nikoli ni vnaprej določen, in je popolnoma ločen od provizije za napotitev, opisane nižje na tej strani.

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

70%

To je zate

Znesek se samodejno nakaže na vašo nastavljeno denarnico za izplačila – zahtevek za izplačilo ni potreben.

30%

Preusmeri na letne oglase

Zajema moderiranje, gostovanje in infrastrukturo za razvrščanje, na kateri se prikazujejo vaši oglasi.

Kako deluje

  1. Eden od vaših oglaševalcev v načinu »Connect« plača za oglas prek vaše integracije.
  2. Oglas se pregleda in odobri – bodisi samodejno bodisi s strani naše ekipe za moderiranje.
  3. Vaš delež je v čakalni vrsti za samodejno izplačilo v vašo denarnico, in sicer po istem načelu kot pri spodaj opisanem programu za priporočanje.
Delež se nikoli ne ustvari, preden ni oglas dejansko odobren – če ga moderator zavrne, se za to plačilo ne dolguje nič. Dodatno plačilo za že aktivni oglas ne prinaša takšnega tveganja in se takoj razdeli.

Pogoji izplačila

  • Na vašem partnerskem računu je nastavljena denarnica za izplačila v kriptovalutah.
  • Z vaše strani ni potrebno nobeno preverjanje identitete (KYC) — vaš partnerski račun je bil preverjen že ob odprtju.

Primer: branje skupnega števila delnic

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
}

Končne točke

Računi

POST/v1/partner/advertisers

Ustvarite oglaševalski račun v imenu enega od vaših uporabnikov (način »Connect«).

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

Poiščite oglaševalski račun, ki ga je ustvaril ta partner.

advertisers:read

Oglas

POST/v1/partner/ads

Ustvarite oglas. Sprva je v statusu osnutka. Izbirna polja advertiser_type, promotion_type, link_type in promoted_brand opisujejo oglaševanje prek partnerskega programa, priporočil, ustvarjalcev ali posameznikov – glejte opombo spodaj.

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

Poišči oglas.

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

Posodobite uredniško vsebino – naslov, opis, povezavo, vrsto oglaševalca, vrsto promocije, vrsto povezave in promovirano blagovno znamko. Kategorije, geografske podatke in vse, kar upošteva sistem za določanje uvrstitve, tukaj ni mogoče spremeniti.

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

Neposredno naložite sliko oglasa (JPEG/PNG/WebP, največ 5 MB). To je potrebno pred prvim plačilom – glejte razdelek o plačilih spodaj.

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

Sliko oglasa nastavite prek URL-ja namesto da naložite datoteko – strežnik jo sam prenese in ponovno objavi. Enaka zahteva: to je potrebno pred prvim plačilom.

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

Trenutna uvrstitev, kategorija in geografski obseg oglasa.

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

Skupno število ogledov in klikov na oglas – število pretečenih/preostalih dni izhaja iz polj `activated_at`/`expires_at`, ki so že v zahtevku GET /{id}, uvrstitev pa iz zahtevka GET /{id}/rank.

ads:read

Plačila

POST/v1/partner/payments

Začnite s kriptovalutnim plačilom za prvi nakup ali polnjenje. Prvo plačilo se ne uspe, pri čemer se prikaže napaka 422, razen če oglas že vsebuje sliko – glej zgoraj navedeno uploadAdImage/setAdImageUrl.

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

Preverite stanje plačila.

payments:read

Priporočila

POST/v1/partner/referrals

Ustvari povezavo za priporočilo.

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

Skupni zaslužki iz napotitev, razčlenjeni po statusu.

referrals:read

Delitev prihodkov iz oglaševanja

GET/v1/partner/ad-revenue/earnings

Vaš 70-odstotni delež zneska, ki so ga oglaševalci, ki ste jih ustvarili v načinu »Connect«, plačali za svoje oglase, razčlenjen po statusu.

ad-revenue:read

Dnevnik dostopa

GET/v1/partner/access-log

Celotna zgodovina klicev za ta ključ — metoda, pot, IP, časovni žig.

Tam

Javne končne točke

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

Lestvica, ki je samo za branje, za določeno kategorijo in geografsko območje.

Javno
GET/v1/tiers

7 nastavljenih cenovnih stopenj (prag, odklejene ugodnosti).

Javno
GET/v1/referral-program

Odstotki provizij, ki trenutno veljajo za sistem kaskadnega napotovanja in program »Leaders Pool«.

Javno
GET/v1/partner-program

Trenutna razdelitev prihodkov iz oglaševanja (način »Connect«) med vami in podjetjem Annual Ads.

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

Iskanje v naravnem jeziku — poizvedbo, kot je »oglaševalci pohištva v Keniji«, usmeri v ustrezno kategorijo in geografsko območje, nato pa vrne ta seznam rezultatov v natančnem dejanskem vrstnem redu.

Javno

Oglaševanje prek partnerskega programa in priporočil

advertiser_type, promotion_type, link_type in promoted_brand so neobvezna polja pri pošiljanju zahtevkov POST in PATCH na /v1/partner/ads — storitev Annual Ads ni omejena le na podjetja, ki oglašujejo same sebe. Ko je link_type affiliate_link ali referral_invitation_link, ali pa je promotion_type affiliate_offer ali referral_opportunity, mora biti affiliate_terms_accepted vrednost true, sicer bo zahteva zavrnjena s kodeksom napake 422. title je omejen na 35 znakov, description pa na 80 – obe omejitvi se izvajata na strežniški strani, ne le v uporabniškem vmesniku nadzorne plošče.

Orodja za umetno inteligenco

Vsak oglaševalski račun dobi nabor vgrajenih orodij z umetno inteligenco – generator vsebine in vizualnih elementov oglasov, pogovorni pomočnik, svetovalec za proračun ter zunanji revizor za optimizacijo za iskalnike (SEO) –, ki se poleg pavšalne letne cene plačujejo z AI-krediti.

Te funkcije se izvajajo prek oglaševalčevega lastnega dostopa do nadzorne plošče (žeton za dostop do seje), ne pa prek API-ključa partnerja – integracija tretje stranke jih ne more aktivirati v imenu oglaševalca.
POST/v1/advertisers/{id}/ai/assistant

Vprašajte Annual Ads — plavajoči pogovorni pomočnik, ki služi izključno v informativne namene in ima le pravico do branja podatkov o računu.

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

Na podlagi kratkega opisa podjetja ustvarite naslov oglasa, opis in ključne besede.

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

Iz istega opisa podjetja ustvarite vizualno predstavitev oglasa (PNG), ki je že pripravljena za priložitev k oglasu.

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

Resnična statistična napoved – nikoli zgolj ugibanje – verjetnosti, da bo določena uvrstitev ostala nespremenjena po 30, 90 oziroma 365 dneh.

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

Analizirajte oglaševalčevo lastno zunanjo spletno stran in predlagajte konkretne izboljšave na področju optimizacije za iskalnike (SEO).

2 kredit(ov)

Primer — ustvarjanje oglaševalske vsebine

Ista kategorija in opis dejavnosti sta podlaga tudi za spodnji generator slik.

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
}

Ustvarite ustrezno vizualno podobo za isti oglas:

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

Pripravljeno oglaševalsko enoto preprosto vstavite na svojo spletno stran – brez razvijanja, brez iframe-a. Skript se prikaže neposredno na strani znotraj izoliranega Shadow DOM-a, tako da se njegovi slogi nikoli ne prenesejo na vašo spletno stran, prav tako pa se slogi vaše spletne strani nikoli ne prenesejo nanj.

Dodaj to na svojo stran

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

Privzeto se prikaže celotna javna lestvica za kategorijo – vsi oglaševalci na platformi, ne le tisti, ki ste jih pridobili vi. Če želite prikazati le oglase oglaševalcev, ki ste jih ustvarili prek načina »Connect« (tisti, ki ustvarjajo vaš delež), dodajte atribut »data-partner« z vašo partnersko identifikacijsko številko (najdete jo na strani »Razvijalci« na vaši nadzorni plošči):

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

Če vaši oglaševalci sodijo v več kategorij, popolnoma odstranite atribut »data-category« — če uporabite samo atribut »data-partner«, bo widget prikazal vse vaše oglase iz vseh kategorij v eni mreži, namesto da bi potrebovali en blok widgeta za vsako kategorijo:

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

Želite poleg widgeta v vsebini dodati še enega v obliki spodnjega pasu, pri čemer bi vsak prikazoval drugačne oglase? Dodajte drugi blok widgeta z atributom data-layout="compact" (en oglas, ki se lahko skrči v majhno okence) in atributom data-offset, nastavljenim na število oglasov, ki jih že prikazuje vaš prvi widget:

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

Lastnosti

data-categoryID kategorije, ki naj se prikaže. Obvezno — razen če je nastavljen parameter »data-partner«; v tem primeru se ob izpustitvi tega parametra prikažejo oglasi tega partnerja v vseh kategorijah.
data-geoGeografski obseg: lokalni, regionalni ali globalni. Privzeto je nastavljeno na globalni obseg.
data-countŠtevilo oglasov, ki naj se prikažejo. Privzeta vrednost je 4.
data-columnsŠtevilo stolpcev v tabeli. Privzeta vrednost je 2.
data-layoutmreža, seznam ali kompaktna razporeditev. Privzeta nastavitev je mreža. Pri kompaktni razporeditvi se prikaže en sam oglas (vrednost »data-count« se ne upošteva) z gumbom, s katerim ga lahko skrčite v majhno okence in ga spet razširite — gre za element v slogu noge strani, ki ga skript sam nikoli ne postavi na fiksno mesto; kontejner div lahko na svoji strani namestite in oblikujete po lastni želji.
data-offsetŠtevilo oglasov z najvišjo uvrstitvijo, ki jih je treba preskočiti. Privzeta vrednost je 0. Omogoča, da drugi widget na isti strani (npr. kompakten widget v nogi strani in mrežasti widget višje na strani) prikaže drugačne oglase, namesto da bi se isti oglas ponovil dvakrat — vnesite število oglasov, ki jih drugi widget že prikazuje.
data-partnerVaša partnerska identifikacijska številka (najdete jo na strani »Razvijalci« na svojem nadzornem panelu). Neobvezno — brez te številke widget prikazuje celotno javno lestvico za to kategorijo, vključno z vsemi oglaševalci na platformi. Z njo pa se prikazujejo le oglasi oglaševalcev, ki ste jih pridobili prek načina »Connect« — tistih, ki dejansko ustvarjajo vaš delež.

Delež prihodkov

Kako partner dejansko prejme provizijo za priporočilo – odstotek, način izplačila in pogoji.

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
}

Ni določena številka

Odstotek provizije je nastavljen na naši strani in se lahko spremeni – vedno ga preberite v realnem času s te končne točke, namesto da vrednost trdno vnesete v kodo.

Popolnoma avtomatsko

Ni končnega roka za izplačilo. Načrtovana naloga izračuna zaslužek, ki je pripravljen za izplačilo, ga razvrsti po oglaševalcih in samodejno izplača, ko so izpolnjeni vsi spodaj navedeni pogoji.

Pogoji izplačila

  • Skupni zaslužek oglaševalca, ki ga je treba izplačati, doseže minimalni znesek za izplačilo.
  • Na njihovem računu je nastavljena denarnica za izplačila v kriptovalutah.
  • Njihov status KYC je preverjen.

Primer: prikaz nakopičenih dobičkov

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
}

Cenovni razredi (v živo)

Podatke preberite v realnem času iz te končne točke — teh vrednosti nikoli ne vpisujte neposredno v kodo, saj se lahko na naši strani spremenijo. Namesto polja za vnos prostega zneska ustvarite izbirnik cenovnih stopenj za svoje uporabnike: vsaka prikazana cena je že natančen znesek, ki ga je treba poslati ob ustvarjanju plačila, prikazane odklejene ugodnosti pa uporabnikom natančno povedo, kaj ta cena vključuje, tako da izberejo ceno, ki jo razumejo, namesto da bi ugibali znesek.

StopnjaCenaOdklene
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Povezava, na katero se lahko klikne
Gold$500.00

Animation unlocked

Povezava, na katero se lahko klikneAnimacija
Platinum$1,000.00

Enhanced exposure

Povezava, na katero se lahko klikneAnimacija
Diamond$2,500.00

Premium placement

Povezava, na katero se lahko klikneAnimacija
Elite$5,000.00

Top-tier visibility

Povezava, na katero se lahko klikneAnimacija
Legendary$10,000.00

Maximum visibility & branding

Povezava, na katero se lahko klikneAnimacija

Omejitve hitrosti

Število zahtevkov je omejeno na ključ in na minuto. Vsak avtentificiran odgovor vsebuje glave X-RateLimit-Limit, X-RateLimit-Remaining in X-RateLimit-Reset; v primeru prekoračitve omejitve se vrne napaka 429 Too Many Requests z glavo Retry-After.

Seznam dovoljenih IP-naslovov

Neobvezno, za vsakega partnerja. Dokler ne dodate vnosa, vaši ključi sprejemajo zahteve s katerega koli IP-naslova – prvi vnos preklopi vse ključe tega partnerja na način, da sprejemajo le zahteve s seznama dovoljenih naslovov.

Spletni hooki

Vsak webhook je podpisan s HMAC-SHA256 z uporabo enkratnega gesla, ki se generira ob ustvarjanju — preverite podpis, preden zaupate vsebini. Dogodki se posredujejo izključno partnerju, ki je lastnik zadevnega oglaševalca.

payment.succeededPlačilo je potrjeno.
payment.refundedVračilo je bilo izvedeno.
ad.activatedOglas se objavi samodejno ali po pregledu s strani skrbnika.
invoice.issuedIzdana je bila faktura.
referral.payout.completedProvizija za priporočilo je dosegla status »izplačana«.
referral.payout.failedSerija izplačil za napotitve se pri ponudniku ne izvede uspešno — zaslužki se vrnejo v stanje »za izplačilo« in se ponovno poskušajo izplačati.
rank.changedUvrstitev oglasa se spremeni — tudi kadar je to posledica plačila drugega oglaševalca.
ad.expiring_soon30, 7 ali 1 dan(i) pred iztekom veljavnosti oglasa.
partner_ad_revenue.payout.completedIzplačilo deleža prihodkov iz oglaševanja je v statusu »plačano«.
partner_ad_revenue.payout.failedIzplačilo deleža prihodkov iz oglaševanja se pri ponudniku ne izvede uspešno – deleži se vrnejo v stanje »za izplačilo« in se poskus ponovi.

Kompleti za razvoj programske opreme

Uradni SDK-ji za JavaScript/TypeScript in Python, ki so bili ustvarjeni na podlagi te iste specifikacije API-ja, so v načrtu, vendar še niso objavljeni – do takrat uporabljajte neposredni HTTP API.

Hitri začetek

SDK še ni na voljo — te funkcije neposredno kličejo HTTP API in že danes delujejo v katerem koli programskem jeziku.

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