Работете директно в платформата Annual Ads — създавайте рекламодатели, публикувайте реклами, инициирайте плащания и проследявайте класирането изцяло чрез API.
Вижте пълната ценова таблицаЗапазвате 70% от сумата, която рекламодателите ви в режим „Connect“ плащат за рекламите си — сумата се превежда автоматично във вашия портфейл. Вижте по-долу как работи това.
Всяко заявка се удостоверява с таен ключ в заглавката „Authorization“, като се използва схемата „Bearer“.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAPI ключовете се издават на одобрените партньорски профили от екипа на Annual Ads.
Създайте партньорски профил| POST | /v1/partner/advertisersСъздайте рекламодателски акаунт от името на един от вашите потребители (режим „Connect“). | 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Пълна история на извикванията за този ключ — метод, път, IP адрес, времева марка. | Там |
| GET | /v1/rankings?category={id}&geo={scope}Класация само за четене по категория и географски обхват. | Публично |
| GET | /v1/tiers7-те конфигурирани ценови нива (праг, отключени предимства). | Публично |
| GET | /v1/referral-programПроцентите на комисионните, които в момента са в сила за каскадата от препоръки и за „Leaders Pool“. | Публично |
| 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. title е ограничено до 35 символа, а description — до 80 — и двете ограничения се прилагат от страна на сървъра, а не само в потребителския интерфейс на таблото.
Всеки рекламодателски акаунт разполага с набор от вградени инструменти, базирани на изкуствен интелект — генератор на рекламно съдържание и визуални елементи, асистент за разговори, съветник по бюджета и външен SEO-аудитор — които се заплащат с AI-кредити в допълнение към фиксираната годишна цена.
| 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“ с вашия партньорски идентификатор (можете да го намерите на страницата „Разработчици“ във вашия собствен контролен панел):
<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 | мрежа, списък или компактен режим. По подразбиране е избран режим „мрежа“. Компактният режим показва една-единствена реклама (атрибутът „data-count“ се игнорира) с бутон за скриване в малък блок и за възстановяване — елемент в стила на долния колонтитул, който никога не се позиционира фиксирано от самия скрипт; вие сами разполагате и оформяте контейнерния div по ваш избор на собствената си страница. |
data-offset | Брой реклами от най-високото ниво, които да се пропуснат. По подразбиране е 0. Позволява на втори виджет на същата страница (например компактен виджет в долната част на страницата и виджет с решетка по-нагоре) да показва различни реклами, вместо да повтаря една и съща реклама два пъти — задайте броя на рекламите, които другият виджет вече показва. |
data-partner | Вашият партньорски идентификатор (можете да го намерите на страницата „Разработчици“ в личния ви профил). Незадължително — без него виджетът показва пълната публична класация за тази категория, включваща всички рекламодатели на платформата. С него се показват само рекламите на рекламодателите, които сте привлекли чрез режим „Connect“ — тези, които действително генерират вашия дял. |
Заявките са ограничени по ключ, на минута. Всеки автентифициран отговор съдържа заглавията X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset; при превишаване на лимита се връща код 429 „Too Many Requests“ със заглавие Retry-After.
По избор, за всеки партньор. Докато не добавите запис, вашите ключове приемат заявки от всеки IP адрес — първият запис превключва всички ключове на този партньор в режим „само от разрешени адреси“.
Всеки уебхук се подписва с 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 | Партидата за изплащане на дял от приходите от реклами се проваля при доставчика — дяловете се връщат в списъка с дължимите суми и се извършва повторен опит. |
Планира се пускането на официални SDK за JavaScript/TypeScript и Python, създадени въз основа на същата тази спецификация на 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": "...",
},
)