Изградите директно на платформи Annual Ads — креирајте оглашиваче, објављујте огласе, покрените исплате и пратите рангирање, потпуно преко API-ја.
Погледајте целу табелу ценаВи држите 70% од онога што ваши оглашивачи у Connect-mode плаћају за своје огласе — аутоматски уплаћено на ваш џеп. Погледајте како то функционише у наставку.
Сваки захтев се аутентикује тајним кључем у заглављу Authorization, користећи шему Bearer.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAPI кључеве издаје тим Annual Ads одобреним партнерским налозима.
Креирајте партнерски налог| POST | /v1/partner/advertisersКреирајте налог оглашивача у име једног од ваших корисника (режим повезивања). | advertisers:write |
| GET | /v1/partner/advertisers/{id}Проверите налог оглашивача који је креирао овај партнер. | advertisers:read |
| POST | /v1/partner/adsКреирајте оглас. Он почиње у статусу нацрта. Опционална поља advertiser_type, promotion_type, link_type и promoted_brand описују партнерско, референтно, креаторско или појединачно оглашавање — погледајте напомену испод. | ads:write |
| GET | /v1/partner/ads/{id}Потражите оглас. | ads:read |
| PATCH | /v1/partner/ads/{id}Ажурирајте уреднички садржај — наслов, опис, линк, тип оглашивача, тип промоције, тип линка и промовисани бренд. Категорија, географија и све што рангирајући механизам чита никада се овде не могу променити. | ads:write |
| POST | /v1/partner/ads/{id}/imageОтпремите слику огласа директно (JPEG/PNG/WebP, највише 5 MB). Потребно пре прве уплате — погледајте групу уплата у наставку. | ads:write |
| POST | /v1/partner/ads/{id}/image-urlПоставите слику огласа преко URL-а уместо отпремања датотеке — сервер ће је сам допремити и хостовати. Исти захтев: потребно је пре прве уплате. | ads:write |
| GET | /v1/partner/ads/{id}/rankТренутни ранг, категорија и географски обим огласа. | ads:read |
| GET | /v1/partner/ads/{id}/statsУкупни прегледи и кликови за оглас — дани који су прошли/преостали потичу из поља activated_at/expires_at која су већ доступна на GET /{id}, а рангирање из GET /{id}/rank. | ads:read |
| POST | /v1/partner/paymentsПокрените крипто плаћање за почетну куповину или допуну. Почетно плаћање неуспева са кодом 422 осим ако реклама већ нема слику — погледајте uploadAdImage/setAdImageUrl изнад. | payments:write |
| GET | /v1/partner/payments/{id}Проверите статус уплате. | payments:read |
| POST | /v1/partner/referralsКреирајте реферални линк. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsКумулативни приходи од упућивања, разврстани по статусу. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsВаш удео од 70% у ономе што су оглашивачи које сте креирали у Connect режиму платили за своје огласе, разбијено по статусу. | ad-revenue:read |
| GET | /v1/partner/access-logПотпуна историја позива за овај кључ — метод, путања, ИП адреса, временски жиг. | Там |
| GET | /v1/rankings?category={id}&geo={scope}Рангирање само за читање за категорију и географски обим. | Јавно |
| GET | /v1/tiers7 конфигурисаних нивоа цена (праг, откључане погодности). | Јавно |
| GET | /v1/referral-programТренутно активни проценти провизије за каскаду препорука и Лидерски пул. | Јавно |
| GET | /v1/partner-programТренутни удео прихода од огласа (Connect режим) између вас и Annual Ads. | Јавно |
| GET | /v1/search?q={query}Претрага природним језиком — усмерава упит попут "оглашивачи намештаја у Кенији" у одговарајућу категорију и географски обим, а затим враћа тај рангинг у свом тачном, стварном редоследу. | Јавно |
Афилијетско и референтно оглашавање
advertiser_type, promotion_type, link_type и promoted_brand су опционална поља у POST и PATCH захтевима на /v1/partner/ads — Annual Ads није ограничен само на компаније које рекламирају себе. Када је link_type affiliate_link или referral_invitation_link, или је promotion_type affiliate_offer или referral_opportunity, affiliate_terms_accepted мора бити true, у супротном се захтев одбија са статусом 422. Наслов је ограничен на 35 знакова, а опис на 80 — оба ограничења се спроводе на страни сервера, а не само у корисничком интерфејсу контролне табле.
Сваки налог оглашивача добија скуп уграђених АИ алата — генератор садржаја и визуелних елемената за огласе, конверзациони асистент, саветник за буџет и спољни SEO аудитор — који се плаћају АИ кредитима, поред фиксне годишње цене.
| POST | /v1/advertisers/{id}/ai/assistantAsk Annual Ads — плутајући конверзациони асистент, само за информације, само за читање података о налогу. | Јавно |
| POST | /v1/advertisers/{id}/ai/creative-studioГенеришите наслов огласа, опис и кључне речи на основу кратког пословног описа. | 2 кредит(а) |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageГенеришите визуелни приказ огласа (PNG) на основу истог описа предузећа, хостован и спреман за прикључивање уз оглас. | 8 кредит(а) |
| POST | /v1/advertisers/{id}/ai/budget-advisorПравилна статистичка пројекција — никада генеративна претпоставка — вероватноће задржавања датог ранга на 30/90/365 дана. | 1 кредит(а) |
| POST | /v1/advertisers/{id}/ai/seo-auditАнализирајте спољни веб-сајт оглашивача и предложите конкретна SEO побољшања. | 2 кредит(а) |
Иста категорија и опис пословања такође покрећу генератор слика испод.
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
}Генеришите одговарајући визуелни приказ за исту рекламу:
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
}Поставите готову рекламу на свој сајт — без икаквог кодирања, без iframe-а. Скрипта се рендерише директно у страници унутар изолованог Shadow DOM-а, тако да стилови из ње никада не прелазе на ваш сајт, а стилови вашег сајта никада не утичу на њу.
<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>По подразумеваном подешавању ово приказује пуну јавну ранг-листу за категорију — сваког оглашивача на платформи, а не само оне које сте довели. Да бисте приказали само огласе оглашивача које сте креирали преко Connect режима (они који генеришу ваш удео), додајте data-partner са ID-ом вашег партнера (пронађите га на страници за програмере на свом контролном табли):
<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>Ако ваши оглашивачи обухватају више категорија, у потпуности уклоните data-category — са само data-partner, виџет приказује све ваше огласе из свих категорија у једној мрежи, уместо да вам треба по један блок виџета за сваку категорију:
<div
class="annualads-widget"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>Желите ли јединицу у стилу подножја поред оне унутар садржаја, при чему свака приказује различите огласе? Додајте други блок виџета са data-layout="compact" (један оглас, који се може склопити у малу пилу) и подесите data-offset на број огласа које ваш први виџет већ приказује:
<!-- 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 | ИД категорије за приказ. Обавезно — осим ако је подешен data-partner, у ком случају изостављање приказује огласе тог партнера у свакој категорији. |
data-geo | Географски обим: локални, регионални или глобални. Подразумевано је глобални. |
data-count | Број огласа за приказивање. Подразумевано 4. |
data-columns | Број колона мреже. Подразумевана вредност је 2. |
data-layout | решетка, листа или компакт. Подразумевано је решетка. Компакт приказује један оглас (број података се игнорише) са дугметом за скупљање у малу пилу и враћање — јединица у стилу подножја, коју сама скрипта никада не позиционира фиксно; контејнер div постављате и стилизујете по жељи на својој страници. |
data-offset | Број највише рангираних огласа које треба прескочити. Подразумевана вредност је 0. Дозвољава другом виџету на истој страници (нпр. компактном у подножју и мрежном виџету даље горе) да прикаже различите огласе уместо да понови исти оглас два пута — наведите број огласа које други виџет већ приказује. |
data-partner | Ваш партнерски ИД (пронађите га на страници "Развојачи" на вашој контролној табли). Опционо — без њега виџет приказује пуни јавни рангинг за ту категорију, односно све оглашиваче на платформи. Са њим се приказују само огласи оглашивача које сте довели преко Connect режима — они који заправо генеришу ваш удео. |
Захтеви су ограничени по кључу у минути. Сваки аутентификовани одговор садржи заглавља X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset; прекорачење ограничења враћа статус 429 Too Many Requests са заглављем Retry-After.
Опционално, по партнеру. Док не додате унос, ваши кључеви прихватају захтеве са било које ИП адресе — први унос пребацује све кључеве тог партнера на режим искључиво са одобрене листе.
Сваки вебхук је потписан HMAC-SHA256 хешом, користећи тајну која се издаје једнократно при креирању — проверите потпис пре него што поверујете садржају. Догађаји се испоручују само партнеру који поседује одговарајућег оглашивача.
payment.succeeded | Плаћање је потврђено. |
payment.refunded | Извршено је повраћај новца. |
ad.activated | Оглас постаје активан, аутоматски или након прегледа администратора. |
invoice.issued | Издаје се фактура. |
referral.payout.completed | Комисија по упуту стиже до статуса плаћене. |
referral.payout.failed | Партија исплате по рефералу не успева код провајдера — зараде се враћају у стање за исплату и покушавају поново. |
rank.changed | Ранг огласа се мења — укључујући и када то изазове уплата другог оглашивача. |
ad.expiring_soon | 30, 7 или 1 дан(и) пре истека огласа. |
partner_ad_revenue.payout.completed | Исплата удела у приходима од огласа достиже статус плаћене. |
partner_ad_revenue.payout.failed | Пакет исплате удела у приходу од огласа не успева код провајдера — удели се враћају у стање наплате и поново се покушавају. |
Званични JavaScript/TypeScript и Python SDK-ови, генерисани из исте спецификације API-ја, су планирани, али још нису објављени — до тада директно користите HTTP API.
Још нема SDK-а — они директно позивају HTTP API и данас раде у било ком програмерском језику.
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": "...",
},
)