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 cenikOhranite 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.
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/jsonAPI-ključe odobrenim partnerskim računom izda ekipa Annual Ads.
Ustvarite partnerski račun| POST | /v1/partner/advertisersUstvarite 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 |
| POST | /v1/partner/adsUstvarite 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}/imageNeposredno 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-urlSliko 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}/rankTrenutna uvrstitev, kategorija in geografski obseg oglasa. | ads:read |
| GET | /v1/partner/ads/{id}/statsSkupno š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 |
| POST | /v1/partner/paymentsZač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 |
| POST | /v1/partner/referralsUstvari povezavo za priporočilo. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsSkupni zaslužki iz napotitev, razčlenjeni po statusu. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsVaš 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 |
| GET | /v1/partner/access-logCelotna zgodovina klicev za ta ključ — metoda, pot, IP, časovni žig. | Tam |
| GET | /v1/rankings?category={id}&geo={scope}Lestvica, ki je samo za branje, za določeno kategorijo in geografsko območje. | Javno |
| GET | /v1/tiers7 nastavljenih cenovnih stopenj (prag, odklejene ugodnosti). | Javno |
| GET | /v1/referral-programOdstotki provizij, ki trenutno veljajo za sistem kaskadnega napotovanja in program »Leaders Pool«. | Javno |
| GET | /v1/partner-programTrenutna 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.
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.
| POST | /v1/advertisers/{id}/ai/assistantVpraš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-studioNa podlagi kratkega opisa podjetja ustvarite naslov oglasa, opis in ključne besede. | 2 kredit(ov) |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageIz 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-advisorResnič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-auditAnalizirajte oglaševalčevo lastno zunanjo spletno stran in predlagajte konkretne izboljšave na področju optimizacije za iskalnike (SEO). | 2 kredit(ov) |
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
}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.
<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>data-category | ID 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-geo | Geografski 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-layout | mrež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-partner | Vaš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ž. |
Š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.
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.
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.succeeded | Plačilo je potrjeno. |
payment.refunded | Vračilo je bilo izvedeno. |
ad.activated | Oglas se objavi samodejno ali po pregledu s strani skrbnika. |
invoice.issued | Izdana je bila faktura. |
referral.payout.completed | Provizija za priporočilo je dosegla status »izplačana«. |
referral.payout.failed | Serija 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.changed | Uvrstitev oglasa se spremeni — tudi kadar je to posledica plačila drugega oglaševalca. |
ad.expiring_soon | 30, 7 ali 1 dan(i) pred iztekom veljavnosti oglasa. |
partner_ad_revenue.payout.completed | Izplačilo deleža prihodkov iz oglaševanja je v statusu »plačano«. |
partner_ad_revenue.payout.failed | Izplač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. |
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.
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": "...",
},
)