Kehitä suoraan Annual Ads -alustalla — luo mainostajia, julkaise mainoksia, käynnistä maksuja ja seuraa sijoitusta kokonaan sovellusliittymän (API) kautta.
Katso koko hintataulukkoSinulle jää 70 % siitä summasta, jonka Connect-tilassa olevat mainostajasi maksavat mainoksistaan — summa maksetaan automaattisesti lompakkoosi. Katso alta, miten se toimii.
Jokainen pyyntö todennetaan salaisella avaimella Authorization-otsikossa Bearer-menetelmää käyttäen.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAnnual Ads -tiimi myöntää API-avaimet hyväksytyille kumppanitileille.
Luo kumppanitili| POST | /v1/partner/advertisersLuo mainostajatili jonkin käyttäjäsi puolesta (Connect-tila). | advertisers:write |
| GET | /v1/partner/advertisers/{id}Etsi tämän yhteistyökumppanin luoma mainostajatili. | advertisers:read |
| POST | /v1/partner/adsLuo mainos. Se on aluksi luonnosvaiheessa. Valinnaiset kentät advertiser_type, promotion_type, link_type ja promoted_brand kuvaavat kumppani-, viittaus-, sisällöntuottaja- tai yksityishenkilön mainontaa — katso alla oleva huomautus. | ads:write |
| GET | /v1/partner/ads/{id}Etsi ilmoitus. | ads:read |
| PATCH | /v1/partner/ads/{id}Päivitä toimituksellinen sisältö — otsikko, kuvaus, linkki, mainostajan tyyppi, mainostyypin, linkkityypin ja mainostetun brändin. Luokkaa, maantieteellistä aluetta tai muita tekijöitä, joita sijoitusmoottori huomioi, ei voi muuttaa tässä. | ads:write |
| POST | /v1/partner/ads/{id}/imageLataa mainoskuva suoraan (JPEG/PNG/WebP, enintään 5 Mt). Vaaditaan ennen ensimmäistä maksua — katso alla oleva maksut-osio. | ads:write |
| POST | /v1/partner/ads/{id}/image-urlMääritä mainoksen kuva URL-osoitteesta tiedoston lataamisen sijaan — palvelin hakee kuvan ja tallentaa sen uudelleen itse. Sama vaatimus: tämä on tehtävä ennen ensimmäistä maksua. | ads:write |
| GET | /v1/partner/ads/{id}/rankMainoksen nykyinen sijoitus, luokka ja maantieteellinen kattavuus. | ads:read |
| GET | /v1/partner/ads/{id}/statsMainoksen katselukertojen ja klikkausten kokonaismäärä sekä kuluneet/jäljellä olevat päivät saadaan kentistä activated_at ja expires_at, jotka sisältyvät jo GET /{id} -pyyntöön, ja sijoitus saadaan GET /{id}/rank -pyynnöstä. | ads:read |
| POST | /v1/partner/paymentsAloita kryptomaksu ensimmäistä ostosta tai saldon lisäystä varten. Ensimmäinen maksu epäonnistuu virhekoodilla 422, ellei mainoksessa ole jo kuvaa — katso yllä oleva uploadAdImage/setAdImageUrl. | payments:write |
| GET | /v1/partner/payments/{id}Tarkista maksun tila. | payments:read |
| POST | /v1/partner/referralsLuo suosittelulinkki. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsKertyneet viittaustulot, jaoteltuna statuksen mukaan. | referrals:read |
| GET | /v1/partner/ad-revenue/earnings70 %:n osuutesi siitä summasta, jonka Connect-tilassa luomasi mainostajat ovat maksaneet mainoksistaan, jaoteltuna tilan mukaan. | ad-revenue:read |
| GET | /v1/partner/access-logTämän avaimen täydellinen kutsuhistoria – menetelmä, polku, IP-osoite, aikaleima. | Siellä |
| GET | /v1/rankings?category={id}&geo={scope}Vain luku -oikeuksin nähtävä ranking tietyn kategorian ja maantieteellisen alueen osalta. | Julkinen |
| GET | /v1/tiers7 määritettyä hintatasoa (kynnysarvo, avatut edut). | Julkinen |
| GET | /v1/referral-programViittausketjussa ja Leaders Poolissa tällä hetkellä voimassa olevat provisio-osuudet. | Julkinen |
| GET | /v1/partner-programNykyinen mainostulojen jakosuhde (Connect-tila) sinun ja Annual Ads -palvelun välillä. | Julkinen |
| GET | /v1/search?q={query}Luonnollisen kielen haku — ohjaa hakulausekkeen, kuten ”huonekalumainostajat Keniassa”, vastaavaan luokkaan ja maantieteelliseen alueeseen ja palauttaa sitten tulokset tarkalleen niiden todellisessa järjestyksessä. | Julkinen |
Kumppani- ja suosittelumainonta
advertiser_type, promotion_type, link_type ja promoted_brand ovat valinnaisia kenttiä POST- ja PATCH-pyynnöissä osoitteeseen /v1/partner/ads — Annual Ads -palvelu ei rajoitu pelkästään itseään mainostaviin yrityksiin. Kun link_type on affiliate_link tai referral_invitation_link tai promotion_type on affiliate_offer tai referral_opportunity, affiliate_terms_accepted-kentän arvon on oltava true, muuten pyyntö hylätään virhekoodilla 422. title-kentän enimmäispituus on 35 merkkiä ja description-kentän 80 merkkiä — molempia rajoituksia valvotaan palvelinpuolella, ei pelkästään hallintapaneelin käyttöliittymässä.
Jokaiseen mainostajatiliin kuuluu joukko sisäänrakennettuja tekoälytyökaluja – mainossisällön ja visuaalisen materiaalin luontityökalu, keskusteluavustaja, budjettineuvoja sekä ulkoinen SEO-tarkastaja –, joiden käyttö maksetaan tekoälykrediiteillä kiinteän vuosimaksun lisäksi.
| POST | /v1/advertisers/{id}/ai/assistantKysy Annual Adsiltä — kelluva keskusteluavustaja, joka tarjoaa vain tietoa ja jolla on vain lukuoikeudet tilitietoihin. | Julkinen |
| POST | /v1/advertisers/{id}/ai/creative-studioLuo mainoksen otsikko, kuvaus ja avainsanat lyhyen yrityskuvauksen perusteella. | 2 opintopistettä |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageLuo kyseisen yrityksen kuvauspohjalta visuaalinen esittelykuva (PNG), joka on jo valmiina liitettäväksi mainokseen. | 8 opintopistettä |
| POST | /v1/advertisers/{id}/ai/budget-advisorTodellinen tilastollinen ennuste — ei missään nimessä arvaus — siitä, kuinka suuret mahdollisuudet ovat säilyttää tietty sijoitus 30, 90 ja 365 päivän kuluttua. | 1 opintopistettä |
| POST | /v1/advertisers/{id}/ai/seo-auditAnalysoi mainostajan oma ulkoinen verkkosivusto ja ehdota konkreettisia SEO-parannuksia. | 2 opintopistettä |
Sama luokka ja liiketoimintakuvaus toimivat myös alla olevan kuvageneraattorin perustana.
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
}Luo samaan mainokseen sopiva kuva:
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
}Lisää valmiiksi laadittu mainosyksikkö omalle sivustollesi — ilman kehitysvaihetta, ilman iframe-kehyksiä. Skripti renderöidään suoraan sivulle eristetyn Shadow DOM:n sisällä, joten sen tyylit eivät koskaan vaikuta sivustoosi, eikä sivustosi tyylit vaikuta siihen.
<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>Oletusasetuksena tässä näkyy kyseisen kategorian koko julkinen ranking – kaikki alustan mainostajat, ei vain ne, jotka olet itse tuonut mukaan. Jos haluat näyttää vain niiden mainostajien mainokset, jotka olet luonut Connect-tilassa (eli ne, joista saat osuutesi), lisää data-partner-attribuutti ja kumppanitunnuksesi (löydät sen oman hallintapaneelisi Kehittäjät-sivulta):
<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>Jos mainostajasi kuuluvat useaan luokkaan, poista data-category kokonaan — kun käytät pelkästään data-partner-attribuuttia, widget näyttää kaikki mainoksesi kaikista luokista yhdessä ruudukossa, eikä jokaiselle luokalle tarvita erillistä widget-lohkoa:
<div
class="annualads-widget"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>Haluatko sisältöalueen vieressä olevan alatunnisteen tyyppisen yksikön, jossa kummassakin näytetään eri mainoksia? Lisää toinen widget-lohko, jossa on attribuutti data-layout="compact" (yksi mainos, joka voidaan taittaa pieneksi pilleriksi) ja attribuutti data-offset asetettuna sen mukaan, kuinka monta mainosta ensimmäisessä widgetissä jo näytetään:
<!-- 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 | Näytettävä luokkatunnus. Pakollinen — ellei data-partner-asetusta ole määritetty; jos se on määritetty, tämän kentän jättäminen tyhjäksi näyttää kyseisen kumppanin mainoksia kaikissa luokissa. |
data-geo | Maantieteellinen laajuus: paikallinen, alueellinen tai maailmanlaajuinen. Oletusasetuksena on maailmanlaajuinen. |
data-count | Näytettävien mainosten määrä. Oletusarvo on 4. |
data-columns | Ruudukon sarakkeiden lukumäärä. Oletusarvo on 2. |
data-layout | ruudukko, luettelo tai kompakti. Oletusasetuksena on ruudukko. Kompakti-asetuksella näytetään yksi mainos (data-count-arvoa ei huomioida) sekä painike, jolla mainoksen voi kutistaa pieneksi pilleriksi ja palauttaa takaisin — kyseessä on alatunnisteen tyyppinen yksikkö, jota skripti ei itse aseta kiinteään paikkaan, vaan voit sijoittaa ja muotoilla container-div-elementin sivullasi haluamallasi tavalla. |
data-offset | Ohitettavien kärkimainosten määrä. Oletusarvo on 0. Tämän avulla samalla sivulla oleva toinen widget (esim. kompakti widget sivun alatunnisteessa ja ruudukkomuotoinen widget ylempänä) voi näyttää erilaisia mainoksia sen sijaan, että sama mainos toistettaisiin kahdesti — syötä se mainosten määrä, jonka toinen widget jo näyttää. |
data-partner | Kumppanitunnuksesi (löydät sen oman hallintapaneelin Kehittäjät-sivulta). Valinnainen — ilman tätä tunnusta widget näyttää kyseisen kategorian täydellisen julkisen ranking-listan, joka sisältää kaikki alustan mainostajat. Tunnuksen avulla näkyvät vain niiden mainostajien mainokset, jotka olet tuonut alustalle Connect-tilan kautta — eli ne, joista sinulle kertyy osuus. |
Pyyntöjen määrä on rajoitettu avainta ja minuuttia kohden. Jokaisessa todennetussa vastauksessa on X-RateLimit-Limit-, X-RateLimit-Remaining- ja X-RateLimit-Reset-otsikot; rajan ylittäminen palauttaa virheen 429 Too Many Requests, jossa on Retry-After-otsikko.
Valinnainen, kumppanikohtaisesti. Ennen kuin lisäät merkinnän, avaimesi hyväksyvät pyyntöjä mistä tahansa IP-osoitteesta — ensimmäinen merkintä muuttaa kyseisen kumppanin kaikki avaimet sallittujen listalle rajoitetuiksi.
Jokainen webhook allekirjoitetaan HMAC-SHA256-algoritmilla käyttäen kertaluonteista salaisuutta, joka luodaan webhookin luomisen yhteydessä — tarkista allekirjoitus ennen kuin luotat datapakettiin. Tapahtumat toimitetaan ainoastaan sille kumppanille, joka omistaa kyseisen mainostajan.
payment.succeeded | Maksu on vahvistettu. |
payment.refunded | Hyvitys on suoritettu. |
ad.activated | Mainos julkaistaan joko automaattisesti tai järjestelmänvalvojan tarkastuksen jälkeen. |
invoice.issued | Lasku laaditaan. |
referral.payout.completed | Viittauspalkkio on tullut maksettavaksi. |
referral.payout.failed | Viittauspalkkioiden maksuerä epäonnistuu palveluntarjoajan puolella — tulot palautetaan maksettavaksi ja yritetään uudelleen. |
rank.changed | Mainoksen sijoitus muuttuu — myös silloin, kun toisen mainostajan maksu aiheuttaa muutoksen. |
ad.expiring_soon | 30, 7 tai 1 päivä ennen ilmoituksen voimassaolon päättymistä. |
partner_ad_revenue.payout.completed | Mainostulojen jakosumma on saavuttanut maksetun tilan. |
partner_ad_revenue.payout.failed | Mainostulojen jakosumman maksu epäonnistuu palveluntarjoajan puolella — osuudet palautuvat maksettavien erien joukkoon ja maksu yritetään uudelleen. |
Tämän saman API-määrittelyn pohjalta laadittuja virallisia JavaScript-/TypeScript- ja Python-SDK-paketteja on suunnitteilla, mutta niitä ei ole vielä julkaistu — siihen asti voit käyttää HTTP-rajapintaa suoraan.
SDK:ta ei ole vielä saatavilla — nämä kutsuvat HTTP-rajapintaa suoraan ja toimivat jo nyt millä tahansa ohjelmointikielellä.
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": "...",
},
)