Annual Ads

Dokumentacija za programere

Gradite izravno 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 načinu Connect plaćaju za svoje oglase — automatski uplaćeno na vaš novčanik. Pogledajte kako to funkcionira u nastavku.

Osnovna URL adresa

https://api.adhub365.com
OpenAPI 3

Autentifikacija

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 potpuno su izolirani jedni od drugih — sandbox ključ nikada ne može čitati niti pisati podatke koje je stvorio produkcijski ključ, i obrnuto.

Scopes

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

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 stvaraju 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 u nastavku čita se uživo s iste krajnje toč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

Isplata se automatski vrši na vaš konfigurirani novčanik za isplatu — nije potreban zahtjev za isplatu.

30%

Odlazak na godišnje oglase

Obuhvaća moderaciju, hosting i infrastrukturu rangiranja na kojoj se temelje vaše oglase.

Kako radi

  1. Jedan od vaših oglašivača u Connect-modeu plaća oglas putem vaše integracije.
  2. Oglas se pregledava 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 u nastavku.
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 raspodjeljuje.

Uvjeti isplate

  • Na vašem partnerskom računu konfiguriran je kripto novčanik za isplate.
  • S vaše strane nije potrebna provjera KYC — vaš partnerski račun je već provjeren prilikom otvaranja.

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 točke

Računi

POST/v1/partner/advertisers

Nastavite oglašivački račun u ime jednog od svojih korisnika (način povezivanja).

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

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

advertisers:read

Oglasi

POST/v1/partner/ads

Stvorite 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 u nastavku.

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

Učitajte sliku oglasa izravno (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 — poslužitelj je sam preuzima i hosta. Isti zahtjev: potrebno prije prve uplate.

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

Trenutni rang, kategorija i geografski doseg 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 kupnju 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

Stvorite 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 u onome što su oglašivači koje ste stvorili u načinu povezivanja platili za svoje oglase, razvrstanog po statusu.

ad-revenue:read

Pristupni zapisnik

GET/v1/partner/access-log

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

Tamo

Javne krajnje točke

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

Rangiranje samo za čitanje za kategoriju i geografski opseg.

Javno
GET/v1/tiers

7 konfiguriranih razina cijena (prag, otključane pogodnosti).

Javno
GET/v1/referral-program

Postotci provizije trenutačno aktivni za kaskadu preporuka i bazen vođa.

Javno
GET/v1/partner-program

Trenutna podjela prihoda od oglasa (Connect način) 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 točnom stvarnom redoslijedu.

Javno

Partnersko i preporučno oglašavanje

advertiser_type, promotion_type, link_type i promoted_brand su neobavezna polja u POST i PATCH /v1/partner/ads — Annual Ads nije ograničen na tvrtke koje same 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 odbacuje s kodom 422. naslov je ograničen na 35 znakova, a opis na 80 — oba ograničenja se provode na strani poslužitelja, a ne samo u korisničkom sučelju nadzorne ploče.

Alati za umjetnu inteligenciju

Svaki oglašivački račun dobiva skup ugrađenih AI alata — generator sadržaja i vizuala za oglase, konverzacijskog asistenta, savjetnika za proračun i vanjskog SEO revizora — koji se plaćaju AI kreditima, uz fiksnu godišnju cijenu.

Oni se izvršavaju putem prijave na vlastitu nadzornu ploču oglašivača (token za sesijsku prijavu), a ne putem partnerskog 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 razgovorni 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 temelju kratkog opisa poslovanja.

2 bodova
POST/v1/advertisers/{id}/ai/creative-studio/image

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

8 bodova
POST/v1/advertisers/{id}/ai/budget-advisor

Prava statistička projekcija — nikada generativna pretpostavka — vjerojatnosti zadržavanja određenog ranga na 30/90/365 dana.

1 bodova
POST/v1/advertisers/{id}/ai/seo-audit

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

2 bodova

Primjer — generirajte sadržaj oglasa

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

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

Postavite gotovu reklamnu jedinicu na svoju web-stranicu — bez faze izrade, bez iframea. Skripta se izravno renderira na stranicu unutar izoliranog Shadow DOM-a, pa se njezini 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 prikazuje se potpuni javni poredak za kategoriju — svi oglašivači na platformi, a ne samo oni koje ste doveli. Da biste prikazali samo oglase oglašivača koje ste kreirali putem Connect moda (oni koji generiraju vaš udio), dodajte atribut data-partner s ID-om vašeg partnera (pronađite ga na stranici Developera na svojoj nadzornoj 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>

Ako vaši oglašivači obuhvaćaju više kategorija, potpuno uklonite data-category — s 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 uz postojeću jedinicu u sadržaju još jednu u stilu podnožja, 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 izostavljanjem prikazuju se oglasi tog partnera u svim kategorijama.
data-geoGeografski opseg: lokalni, regionalni ili globalni. Zadano je globalni.
data-countBroj oglasa za prikaz. Zadano je 4.
data-columnsBroj stupaca mreže. Zadano je 2.
data-layoutmreža, popis ili kompaktno. Zadano je mreža. Kompaktno prikazuje jedan oglas (broj podataka se zanemaruje) s gumbom za skupljanje u malu pilulu i vraćanje — jedinica u stilu podnožja, nikada fiksno pozicionirana od strane skripte; samostalno postavljate i stilizirate div spremnika na svojoj stranici kako želite.
data-offsetBroj oglasa s najvišim rangom koje treba preskočiti. Zadano je 0. Omogućuje drugom widgetu na istoj stranici (npr. kompaktnom u podnožju i mrežnom dalje gore) da prikazuje različite oglase umjesto da isti oglas ponavlja dvaput — proslijedi broj oglasa koje drugi widget već prikazuje.
data-partnerVaš ID partnera (pronađite ga na stranici Developera na svojoj nadzornoj ploči). Neobavezno — bez njega widget prikazuje potpunu javnu ljestvicu za tu kategoriju, odnosno sve oglašivače na platformi. S njim se prikazuju samo oglasi oglašivača koje ste doveli putem Connect načina — oni koji zapravo generiraju vaš udio.

Podjela prihoda

Kako partnerova provizija za preporuku zapravo stiže do njega — postotak, 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 fiksan broj

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

Potpuno automatski

Ne postoji krajnja točka isplate. Zakazani posao obračunava isplative zarade, grupira ih po oglašivaču i automatski ih isplaćuje čim su ispunjeni svi donji uvjeti.

Uvjeti isplate

  • Ukupna isplativa zarada oglašivača doseže minimalni iznos isplate.
  • Na njihovom je računu konfiguriran 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
}

Razine cijena (uživo)

Čitaj uživo s ovog krajnjeg točka — nikada ne upisuj ove vrijednosti izravno u kod, mogu se promijeniti s naše strane. Izradite odabirač razina za svoje korisnike umjesto polja za slobodan iznos: svaka prikazana cijena već je točan iznos za slanje prilikom izrade uplate, a ovdje prikazane otključane pogodnosti točno govore korisnicima što ta cijena uključuje, pa odabiru cijenu koju razumiju umjesto da nagađaju iznos.

RazinaCijenaOtključavanja
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 nosi zaglavlja X-RateLimit-Limit, X-RateLimit-Remaining i X-RateLimit-Reset; prekoračenje ograničenja vraća kôd 429 Previše zahtjeva s zaglavljem Retry-After.

IP dopušteni popis

Opcionalno, po partneru. Dok ne dodate unos, vaši ključevi prihvaćaju zahtjeve s bilo koje IP adrese — prvi unos prebacuje sve ključeve tog partnera na režim isključivo dopuštenog popisa.

Webhooks

Svaki webhook je potpisan HMAC-SHA256 pomoću tajne koja se izdaje samo jednom pri stvaranju — provjerite potpis prije povjerenja u teret. Događaji se isporučuju 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.issuedIzdana je faktura.
referral.payout.completedReferentna provizija dosegne status plaćene.
referral.payout.failedSerija isplata provizija za preporuke ne uspije kod pružatelja usluga — zarada se vraća u stanje za isplatu i ponovno 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 dosegla je status plaćanja.
partner_ad_revenue.payout.failedSerija isplata udjela prihoda od oglasa ne uspije kod pružatelja usluga — udjeli se vraćaju u stanje za isplatu i ponovno se pokušavaju.

Razvojni setovi za softver

Službeni JavaScript/TypeScript i Python SDK-ovi, generirani iz iste API specifikacije, planirani su, ali još nisu objavljeni — do tada izravno pozivajte HTTP API.

Brzi početak

Još nema SDK-a — oni izravno 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": "...",
    },
)