Стварайце непасрэдна на платформе 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Стварыце ўліковы запіс рэкламадаўцы ад імя аднаго з вашых карыстальнікаў (рэжым «Падключэнне»). | 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 МБ). Патрабуецца перад першай аплатай — гл. групу аплат ніжэй. | 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. Абмежаванне на title складае 35 сімвалаў, а на description — 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 з ідэнтыфікатарам вашага партнёра (знойдзіце яго на старонцы распрацоўшчыкаў у вашым уласным кабінеце):
<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 | сетка, спіс або кампакт. Па змаўчанні — сетка. Рэжым кампакт паказвае адну рэкламу (колькасць даных не ўлічваецца) з кнопкай, каб схаваць яе ў невялікую кнопку і вярнуць назад — гэта блок у стылі падваконніка, які сам скрыпт ніколі не размяшчае фіксавана; вы самі размяшчаеце і стылюеце кантэйнер 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 | Партыя выплат долі даходаў ад рэкламы правальваецца ў пастаўшчыка — долі вяртаюцца ў раздзел для выплаты і спрабуюцца зноў. |
Афіцыйныя 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": "...",
},
)