Annual Ads

Dokumentacija za programere

Gradite direktno na platformi Annual Ads — kreirajte oglašivače, objavljujte oglase, pokrenite isplate i pratite rang, sve putem API-ja.

Pogledajte cijeli cjenovnik

Zadržavate 70% od onoga što vaši oglašivači u Connect modu plaćaju za svoje oglase — automatski isplaćeno na vaš novčanik. Pogledajte kako to funkcionira u nastavku.

Osnovna URL adresa

https://api.adhub365.com
OpenAPI 3

Autorizacija

Svaki zahtjev se autentificira tajnim ključem u zaglavlju Autorizacija, koristeći Bearer shemu.

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

Sandbox i produkcija

Sandbox i produkcijski ključevi su potpuno izolirani jedni od drugih — sandbox ključ nikada ne može čitati niti pisati podatke koje je kreirao produkcijski ključ, i obrnuto.

Cijevi

Svaki ključ je ograničen na opsege s kojima je izdan — ključ nikada nema više pristupa nego partnerski račun koji ga je kreirao.

API ključevi se izdaju odobrenim partnerskim računima od strane tima za godišnje oglase.

Kreirajte partnerski račun

Podjela prihoda od oglasa

Ako vaši API ključevi kreiraju račune oglašivača za vaše korisnike (način povezivanja — vidi Autentifikaciju gore), zarađujete udio u onome što ti oglašivači plaćaju za svoje oglase. Podjela ispod se čita uživo s iste krajnje tačke, nikada nije fiksno kodirana i potpuno je odvojena od provizije za preporuke niže na ovoj stranici.

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

70%

Pripada tebi

Automatski isplaćeno na vaš konfigurirani novčanik za isplatu — nije potreban zahtjev za isplatu.

30%

Preusmjerava na godišnje oglase

Pokriva moderaciju, hosting i infrastrukturu rangiranja na kojoj se prikazuju vaše reklame.

Kako radi

  1. Jedan od vaših oglašivača u Connect-modeu plaća oglas putem vaše integracije.
  2. Oglas se pregleda i odobrava — automatski ili od strane našeg tima za moderaciju.
  3. Vaš udio je stavljen u red za automatsku isplatu na vaš novčanik, isti mehanizam kao i kod programa preporuka ispod.
Dionica se nikada ne stvara prije nego što oglas bude odobren — ako ga moderacija odbije, na toj uplati ništa nije dospjelo. Dopuna već aktivnog oglasa ne nosi takav rizik i odmah se raspodijeli.

Uslovi isplate

  • Na vašem partnerskom računu je konfigurisan kripto novčanik za isplate.
  • S vaše strane nije potreban KYC — vaš partner račun je već provjeren prilikom kreiranja.

Primjer: čitanje akumuliranih udjela

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
}

Krajnje tačke

Računi

POST/v1/partner/advertisers

Kreirajte račun oglašivača u ime jednog od vaših korisnika (Connect mod).

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

Potražite oglašivački račun koji je kreirao ovaj partner.

advertisers:read

Oglasi

POST/v1/partner/ads

Kreirajte oglas. Počinje u statusu nacrta. Opcionalna polja advertiser_type, promotion_type, link_type i promoted_brand opisuju partnersko, preporučeno, kreatorsko ili individualno oglašavanje — pogledajte napomenu ispod.

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

Potraži oglas.

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

Ažurirajte urednički sadržaj — naslov, opis, poveznica, vrsta oglašivača, vrsta promocije, vrsta poveznice i promovirani brend. Kategorija, geografija i sve što čita mehanizam rangiranja ovdje se nikada ne mogu promijeniti.

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

Direktno učitajte sliku oglasa (JPEG/PNG/WebP, najviše 5 MB). Potrebno prije prve uplate — pogledajte grupu plaćanja u nastavku.

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

Postavite sliku oglasa putem URL-a umjesto učitavanja datoteke — server je sam preuzima i hostuje. Isti zahtjev: potrebno prije prve uplate.

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

Trenutni rang, kategorija i geografski obuhvat oglasa.

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

Ukupni pregledi i klikovi na oglas — dani protekli/preostali dolaze iz polja activated_at/expires_at već dostupnih na GET /{id}, a rang iz GET /{id}/rank.

ads:read

Plaćanja

POST/v1/partner/payments

Pokrenite kripto plaćanje za početnu kupovinu ili dopunu. Početno plaćanje ne uspijeva s greškom 422 osim ako oglas već ima sliku — pogledajte uploadAdImage/setAdImageUrl gore.

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

Provjerite status uplate.

payments:read

Uputnice

POST/v1/partner/referrals

Kreirajte partnersku poveznicu.

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

Kumulativni prihodi od preporuka, razvrstani po statusu.

referrals:read

Podjela prihoda od oglasa

GET/v1/partner/ad-revenue/earnings

Vaših 70% udjela od onoga što su oglašivači koje ste kreirali u Connect modu platili za svoje oglase, razvrstano po statusu.

ad-revenue:read

Pristupni zapisnik

GET/v1/partner/access-log

Potpuna historija poziva za ovaj ključ — metoda, putanja, IP, vremenski žig.

Tamo

Javne krajnje tačke

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

Rangiranje samo za čitanje za kategoriju i geografski opseg.

Javno
GET/v1/tiers

7 konfiguriranih cjenovnih nivoa (prag, otključane pogodnosti).

Javno
GET/v1/referral-program

Postotci provizije koji su trenutno aktivni za kaskadu preporuka i bazen lidera.

Javno
GET/v1/partner-program

Trenutni omjer prihoda od oglasa (Connect mod) između vas i Annual Ads.

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

Pretraga prirodnim jezikom — usmjerava upit poput "oglašivači namještaja u Keniji" na odgovarajuću kategoriju i geografski opseg, a zatim vraća taj poredak, u njegovom tačnom, stvarnom redoslijedu.

Javno

Affiliate i referalno oglašavanje

advertiser_type, promotion_type, link_type i promoted_brand su opcionalna polja na POST i PATCH /v1/partner/ads — Annual Ads nije ograničeno na preduzeća koja oglašavaju sebe. Kada je link_type affiliate_link ili referral_invitation_link, ili promotion_type affiliate_offer ili referral_opportunity, affiliate_terms_accepted mora biti true, inače se zahtjev odbija kodom 422. naslov je ograničen na 35 znakova, a opis na 80 — oba ograničenja se provode na strani servera, a ne samo u korisničkom interfejsu nadzorne ploče.

Alatke za umjetnu inteligenciju

Svaki oglašivački račun dobija skup ugrađenih AI alata — generator sadržaja i vizuala za oglase, konverzacijskog asistenta, savjetnika za budžet i vanjskog SEO revizora — koji se plaćaju AI kreditima, pored fiksne godišnje naknade.

Oni se izvršavaju putem prijave na kontrolnu ploču oglašivača (token sesijskog pristupa), a ne putem partnerovog API ključa — integracija treće strane ih ne može pozvati u ime oglašivača.
POST/v1/advertisers/{id}/ai/assistant

Ask Annual Ads — plutajući konverzacijski asistent, isključivo informativne prirode, samo za čitanje podataka o računu.

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

Generirajte naslov oglasa, opis i ključne riječi na osnovu kratkog opisa poslovanja.

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

Generirajte vizualni prikaz oglasa (PNG) iz istog opisa poslovanja, hostiran i spreman za priloženje uz oglas.

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

Prava statistička projekcija — nikada proizvoljna procjena — vjerovatnoće zadržavanja određenog ranga na 30/90/365 dana.

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

Analizirajte vanjsku web stranicu oglašivača i predložite konkretna SEO poboljšanja.

2 kredit(a)

Primjer — generirajte sadržaj oglasa

Ista kategorija i opis poslovanja također pokreću generator slika ispod.

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
}

Generirajte odgovarajući vizual za istu reklamu:

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

Postavite gotovu reklamnu jedinicu na svoju stranicu — bez faze izrade, bez iframea. Skripta se prikazuje direktno na stranici unutar izolovanog Shadow DOM-a, tako da se njeni stilovi nikada ne prenose na vašu stranicu, a stilovi vaše stranice se nikada ne prenose na nju.

Dodaj to na svoju stranicu

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

Po zadanom ovo prikazuje potpunu javnu rang-listu za kategoriju — svakog oglašivača na platformi, a ne samo one koje ste doveli. Da biste prikazali samo oglase oglašivača koje ste kreirali putem Connect moda (oni koji generišu vaš udio), dodajte data-partner sa ID-om vašeg partnera (pronađite ga na stranici za programere na svom kontrolnom panelu):

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

Ako vaši oglašivači obuhvataju više kategorija, potpuno uklonite data-category — sa samo data-partnerom, widget prikazuje sve vaše oglase iz svih kategorija u jednoj mreži, umjesto da vam treba po jedan blok widgeta za svaku kategoriju:

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

Želite li jedinicu u stilu podnožja pored one u sadržaju, pri čemu svaka prikazuje različite oglase? Dodajte drugi blok widgeta s atributom data-layout="compact" (jedan oglas, sklopiv u malu pilulu) i postavite data-offset na broj oglasa koje vaš prvi widget već prikazuje:

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

Atributi

data-categoryID kategorije za prikaz. Obavezno — osim ako je postavljena opcija data-partner, u kojem slučaju izostavljanje prikazuje oglase tog partnera u svim kategorijama.
data-geoGeografski opseg: lokalni, regionalni ili globalni. Po zadanom je globalni.
data-countBroj oglasa za prikazivanje. Zadano 4.
data-columnsBroj stupaca mreže. Zadano je 2.
data-layoutmreža, lista ili kompaktno. Po zadanom je mreža. Kompaktno prikazuje jedan oglas (broj podataka se zanemaruje) s dugmetom za skupljanje u malu pilulu i vraćanje — jedinica u stilu podnožja, nikada fiksno pozicionirana od strane skripte; sami postavljate i stilizirate div kontejner kako želite na svojoj stranici.
data-offsetBroj oglasa iz vrhunske ponude koje treba preskočiti. Po zadanom je 0. Omogućava drugom widgetu na istoj stranici (npr. kompaktnom u podnožju i mrežnom dalje gore) da prikazuje različite oglase umjesto da isti oglas ponovi dvaput — proslijedi broj oglasa koje drugi widget već prikazuje.
data-partnerVaš partner ID (pronađite ga na stranici za programere na svojoj kontrolnoj ploči). Opcionalno — bez njega, widget prikazuje potpunu javnu rang-listu za tu kategoriju, svakog oglašivača na platformi. S njim, samo oglase oglašivača koje ste doveli putem Connect načina — oni koji zapravo generišu vaš udio.

Podjela prihoda

Kako partnerova provizija za preporuku zapravo stiže do njega — procenat, mehanizam isplate i preduvjeti.

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
}

Nije fiksni broj

Postotak provizije je konfigurisan na našoj strani i može se promijeniti — uvijek ga čitajte uživo s ovog krajnjeg mjesta umjesto da fiksno unosite vrijednost.

Potpuno automatski

Ne postoji krajnja tačka isplate. Zakazani posao obračunava isplativa zaradu, grupiše je po oglašivaču i automatski isplaćuje čim su ispunjeni svi dole navedeni uslovi.

Uslovi isplate

  • Ukupni isplativi prihodi oglašivača dosežu minimalni iznos isplate.
  • Na njihovom računu je konfigurisan kripto novčanik za isplatu.
  • Njihov KYC status je provjeren.

Primjer: čitanje akumulirane zarade

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
}

Nivoi cijena (uživo)

Čitaj uživo iz ovog krajnjeg mjesta — nikada ne upisuj ove vrijednosti direktno u kod, mogu se promijeniti na našoj strani. Izradite odabirač razina za svoje korisnike umjesto polja za slobodan iznos: svaka prikazana cijena već je točan iznos za slanje prilikom kreiranja uplate, a ovdje prikazane otključane pogodnosti korisnicima tačno govore što ta cijena nudi, pa odaberu cijenu koju razumiju umjesto da pogađaju broj.

NivoCijenaOtključava
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Klikabilna poveznica
Gold$500.00

Animation unlocked

Klikabilna poveznicaAnimacija
Platinum$1,000.00

Enhanced exposure

Klikabilna poveznicaAnimacija
Diamond$2,500.00

Premium placement

Klikabilna poveznicaAnimacija
Elite$5,000.00

Top-tier visibility

Klikabilna poveznicaAnimacija
Legendary$10,000.00

Maximum visibility & branding

Klikabilna poveznicaAnimacija

Ograničenja brzine

Zahtjevi su ograničeni po ključu u minuti. Svaki autentificirani odgovor sadrži zaglavlja X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset; prekoračenje limita vraća kod greške 429 Previše zahtjeva uz zaglavlje Retry-After.

IP lista dozvoljenih

Opcionalno, po partneru. Dok ne dodate unos, vaši ključevi prihvataju zahtjeve sa bilo koje IP adrese — prvi unos prebacuje sve ključeve tog partnera na režim isključivo dozvoljene liste.

Webhooks

Svaki webhook je potpisan HMAC-SHA256 metodom koristeći tajnu koja se izdaje samo jednom, pri kreiranju — provjerite potpis prije povjeravanja tereta. Događaji se dostavljaju samo partneru koji posjeduje odgovarajućeg oglašivača.

payment.succeededUplata je potvrđena.
payment.refundedPovrat novca je izvršen.
ad.activatedOglas postaje aktivan, automatski ili nakon pregleda administratora.
invoice.issuedIzdaje se faktura.
referral.payout.completedReferalna provizija dostiže status plaćanja.
referral.payout.failedSerija isplata provizija za preporuke ne uspije kod pružatelja usluga — zarada se vraća na stanje za isplatu i ponovo se pokušava.
rank.changedRang oglasa se mijenja — uključujući i kada ga uzrokuje uplata drugog oglašivača.
ad.expiring_soon30, 7 ili 1 dan prije isteka oglasa.
partner_ad_revenue.payout.completedIsplata udjela prihoda od oglasa dostiže status plaćanja.
partner_ad_revenue.payout.failedSerija isplate udjela prihoda od oglasa ne uspije kod pružatelja usluga — udjeli se vraćaju na stanje za isplatu i ponovo se pokušavaju.

Razvojni kompleti za softver

Zvanični JavaScript/TypeScript i Python SDK-ovi, generisani iz iste API specifikacije, su planirani, ali još nisu objavljeni — do tada direktno pozivajte HTTP API.

Brzi početak

Još nema SDK-a — oni direktno pozivaju HTTP API i danas rade u bilo kojem 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": "...",
    },
)