Annual Ads

Документация за разработчици

Работете директно в платформата Annual Ads — създавайте рекламодатели, публикувайте реклами, инициирайте плащания и проследявайте класирането изцяло чрез API.

Вижте пълната ценова таблица

Запазвате 70% от сумата, която рекламодателите ви в режим „Connect“ плащат за рекламите си — сумата се превежда автоматично във вашия портфейл. Вижте по-долу как работи това.

Базов URL адрес

https://api.adhub365.com
OpenAPI 3

Удостоверяване

Всяко заявка се удостоверява с таен ключ в заглавката „Authorization“, като се използва схемата „Bearer“.

POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/json

Тестова среда и производствена среда

Ключовете за тестовата среда и за производствената среда са напълно изолирани един от друг — ключът за тестовата среда никога не може да чете или записва данни, създадени от ключ за производствената среда, и обратното.

Обхвати

Всеки ключ е ограничен до обхвата, за който е издаден — ключът никога не разполага с по-широк достъп от партньорския акаунт, който го е създал.

API ключовете се издават на одобрените партньорски профили от екипа на Annual Ads.

Създайте партньорски профил

Разпределение на приходите от реклама

Ако вашите API ключове създават рекламодателски профили за вашите собствени потребители (режим „Connect“ — вижте „Удостоверяване“ по-горе), вие получавате дял от сумата, която тези рекламодатели плащат за рекламите си. Посоченото по-долу разпределение се чете в реално време от същия този ендпойнт, никога не е фиксирано в кода и е напълно отделено от комисионната за препоръки, описана по-надолу на тази страница.

GET https://api.adhub365.com/v1/partner-program
{
  "partner_share_percentage": 0.7,
  "platform_share_percentage": 0.3
}

70%

За теб е

Сумата се изплаща автоматично в настроен от вас портфейл за изплащане — не е необходимо да подавате заявка за теглене.

30%

Преминава към „Годишни реклами“

Обхваща модерацията, хостинга и инфраструктурата за класиране, върху която се показват рекламите ви.

Как работи

  1. Един от вашите рекламодатели в режим „Connect“ заплаща за реклама чрез вашата интеграция.
  2. Рекламата се проверява и одобрява — автоматично или от нашия екип за модерация.
  3. Вашият дял е добавен в опашката за автоматично изплащане към портфейла ви – същият механизъм, както при програмата за препоръки по-долу.
Дялът никога не се създава, преди рекламата да бъде действително одобрена — ако модераторите я отхвърлят, не се дължи нищо по това плащане. Допълнителното финансиране на вече активна реклама не носи такъв риск и дялът се разпределя незабавно.

Условия за изплащане

  • В партньорския ви акаунт е настроен портфейл за изплащане в криптовалута.
  • От ваша страна не се изисква KYC — партньорският ви акаунт вече е преминал проверка при създаването му.

Пример: отчитане на натрупаните акции

GET https://api.adhub365.com/v1/partner/ad-revenue/earnings
Authorization: Bearer sk_sandbox_...
{
  "shares": [
    {
      "id": "share_1a2b...",
      "payment_id": "pay_9f2a...",
      "ad_id": "ad_7c31...",
      "partner_amount_usd": 140.0,
      "platform_amount_usd": 60.0,
      "status": "paid",
      "payable_after": "2026-08-03T00:00:00Z",
      "paid_at": "2026-08-05T10:12:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 140.0
}

Крайни точки

Сметки

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/tiers

7-те конфигурирани ценови нива (праг, отключени предимства).

Публично
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-кредити в допълнение към фиксираната годишна цена.

Те се изпълняват чрез данните за вход в личния панел на рекламодателя (токен за достъп до сесията), а не чрез API ключ на партньор — интеграция от трета страна не може да ги извика от името на рекламодателя.
POST/v1/advertisers/{id}/ai/assistant

Ask 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“ — тези, които действително генерират вашия дял.

Дял от приходите

Как всъщност партньорът получава комисионната за препоръка — процентът, механизмът на изплащане и предварителните условия.

GET https://api.adhub365.com/v1/referral-program
{
  "levels": [
    {
      "level": 1,
      "percentage": 0.1
    }
  ],
  "leaders_pool_percentage_of_gmv": 0.05,
  "founding_advertiser_pool_percentage_of_gmv": 0.05,
  "payout_verification_window_hours": 48,
  "min_payout_usd": 1
}

Не е фиксирано число

Процентът на комисионната се настройва от наша страна и може да се променя — винаги го проверявайте в реално време от този ендпойнт, вместо да задавате стойност чрез твърдо кодиране.

Напълно автоматичен

Няма краен срок за теглене. Планираната задача изчислява дължимите печалби, групира ги по рекламодатели и ги изплаща автоматично, след като бъдат изпълнени всички условия по-долу.

Условия за изплащане

  • Общата сума на доходите на рекламодателя, подлежащи на изплащане, достига минималната сума за изплащане.
  • В профила им е настроен портфейл за изплащане на криптовалута.
  • Статусът им по KYC е потвърден.

Пример: отчитане на натрупаните печалби

GET https://api.adhub365.com/v1/partner/referrals/{code}/earnings
Authorization: Bearer sk_sandbox_...
{
  "code": "ann-2f8c",
  "earnings": [
    {
      "id": "earn_1a2b...",
      "payment_id": "pay_9f2a...",
      "amount_usd": 30.0,
      "status": "paid",
      "payable_after": "2026-08-01T00:00:00Z",
      "paid_at": "2026-08-03T14:22:00Z"
    }
  ],
  "total_payable_pending_usd": 0.0,
  "total_payable_usd": 0.0,
  "total_processing_usd": 0.0,
  "total_paid_usd": 30.0
}

Ценови нива (в реално време)

Четете данните на живо от този ендпойнт — никога не задавайте тези стойности на твърдо, тъй като те могат да се променят от наша страна. Създайте избор на ценови план за вашите потребители вместо поле за свободно въвеждане на сума: всяка показана цена вече е точната сума, която трябва да се изпрати при създаване на плащането, а показаните тук отключени предимства информират потребителите точно какво получават срещу тази цена, така че те избират цена, която разбират, вместо да гадаят каква сума да въведат.

НивоЦенаОтключвания
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Връзка, върху която може да се кликне
Gold$500.00

Animation unlocked

Връзка, върху която може да се кликнеАнимация
Platinum$1,000.00

Enhanced exposure

Връзка, върху която може да се кликнеАнимация
Diamond$2,500.00

Premium placement

Връзка, върху която може да се кликнеАнимация
Elite$5,000.00

Top-tier visibility

Връзка, върху която може да се кликнеАнимация
Legendary$10,000.00

Maximum visibility & branding

Връзка, върху която може да се кликнеАнимация

Ограничения на скоростта

Заявките са ограничени по ключ, на минута. Всеки автентифициран отговор съдържа заглавията X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset; при превишаване на лимита се връща код 429 „Too Many Requests“ със заглавие Retry-After.

Списък с разрешени IP адреси

По избор, за всеки партньор. Докато не добавите запис, вашите ключове приемат заявки от всеки IP адрес — първият запис превключва всички ключове на този партньор в режим „само от разрешени адреси“.

Уебхукове

Всеки уебхук се подписва с HMAC-SHA256, като се използва тайник, издаден еднократно при създаването му — проверете подписа, преди да се доверите на полезния товар. Събитията се изпращат само до партньора, който е собственик на съответния рекламодател.

payment.succeededПлащането е потвърдено.
payment.refundedВъзстановяването на сумата е извършено.
ad.activatedРекламата се активира – автоматично или след преглед от администратора.
invoice.issuedИзготвя се фактура.
referral.payout.completedКомисионната за препоръка е достигнала статуса „изплатена“.
referral.payout.failedПартидата с изплащания по реферална програма се проваля при доставчика — сумите се връщат в сметката за изплащания и се извършва повторен опит.
rank.changedРейтингът на дадена реклама се променя — включително когато това се дължи на плащане от друг рекламодател.
ad.expiring_soon30, 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": "...",
    },
)