Изградете директно на платформата Annual Ads — креирајте рекламодатели, објавувајте реклами, активирајте плаќања и следете го рангирањето, целосно преку API.
Погледнете ја целата табела со цениТи го задржуваш 70% од она што вашите рекламодатели во Connect-mode плаќаат за нивните реклами — автоматски исплатено во вашиот паричник. Погледнете подолу како функционира.
Секој барање се автентицира со таен клуч во заглавјето Authorization, користејќи ја шемата Bearer.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAPI клучевите се издаваат на одобрени партнерски сметки од тимот за годишни реклами.
Креирајте партнерска сметка| 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Процентите на комисијата кои моментално се активни за референтниот каскад и Лидерскиот пул. | Јавно |
| 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 (најдете го на страницата Developers во вашиот контролен панел):
<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 | ID на категорија за прикажување. Задолжително — освен ако не е поставен data-partner, во кој случај неговото изоставување прикажува реклами на партнерот во секоја категорија. |
data-geo | Географски опсег: локален, регионален или глобален. Стандардно е глобален. |
data-count | Број на реклами за прикажување. Подирено е на 4. |
data-columns | Број на колони во мрежата. По подразбирање е 2. |
data-layout | решетка, листа или компакт. По подразбирање е решетка. Компакт прикажува една реклама (data-count се игнорира) со копче за нејзино собирање во мала пилула и враќање — единица во стил на подножје, која никогаш не е фиксирана од самиот скрипт; вие сами го поставувате и стилизирате контејнерскиот div како што сакате на вашата страница. |
data-offset | Број на највисоко рангирани реклами што ќе се прескокнат. Стандардно е 0. Овозможува втор виџет на истата страница (на пр. компактен во подножјето и мрежест повисоко) да прикажува различни реклами наместо да ја повторува истата реклама двапати — внесете го бројот на реклами што другиот виџет веќе ги прикажува. |
data-partner | Вашиот партнерски ID (го најдете на страницата "Развојувачи" на вашата контролна табла). Опционално — без него, виџетот ја прикажува целосната јавна ранг-листа за таа категорија, секој огласувач на платформата. Со него, само огласи од огласувачи што сте ги донеле преку 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 | Пакет за исплата на удел од приходите од реклами не успева кај провајдерот — уделите се враќаат во статус "за исплата" и се повторно обидуваат. |
Официјалните 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": "...",
},
)