Annual Ads

Документација за програмери

Изградете директно на платформата Annual Ads — креирајте рекламодатели, објавувајте реклами, активирајте плаќања и следете го рангирањето, целосно преку API.

Погледнете ја целата табела со цени

Ти го задржуваш 70% од она што вашите рекламодатели во Connect-mode плаќаат за нивните реклами — автоматски исплатено во вашиот паричник. Погледнете подолу како функционира.

Основен 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

Песочница и продукција

Sandbox и production клучевите се целосно изолирани еден од друг — sandbox клуч никогаш не може да чита или запишува податоци создадени од production клуч, и обратно.

Опсези

Секој клуч е ограничен на опсезите со кои е издаден — клуч никогаш нема поголем пристап од партнерската сметка што го создала.

API клучевите се издаваат на одобрени партнерски сметки од тимот за годишни реклами.

Креирајте партнерска сметка

Споделување на приходите од реклами

Ако вашите 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

Процентите на комисијата кои моментално се активни за референтниот каскад и Лидерскиот пул.

Јавно
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 ревизор — кои се плаќаат со кредити за вештачка интелигенција, покрај фиксната годишна цена.

Тие се извршуваат преку најавувањето на контролната табла на огласувачот (токен за пристап на сесија), а не преку партнерски 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 со вашиот партнерски 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-categoryID на категорија за прикажување. Задолжително — освен ако не е поставен data-partner, во кој случај неговото изоставување прикажува реклами на партнерот во секоја категорија.
data-geoГеографски опсег: локален, регионален или глобален. Стандардно е глобален.
data-countБрој на реклами за прикажување. Подирено е на 4.
data-columnsБрој на колони во мрежата. По подразбирање е 2.
data-layoutрешетка, листа или компакт. По подразбирање е решетка. Компакт прикажува една реклама (data-count се игнорира) со копче за нејзино собирање во мала пилула и враќање — единица во стил на подножје, која никогаш не е фиксирана од самиот скрипт; вие сами го поставувате и стилизирате контејнерскиот div како што сакате на вашата страница.
data-offsetБрој на највисоко рангирани реклами што ќе се прескокнат. Стандардно е 0. Овозможува втор виџет на истата страница (на пр. компактен во подножјето и мрежест повисоко) да прикажува различни реклами наместо да ја повторува истата реклама двапати — внесете го бројот на реклами што другиот виџет веќе ги прикажува.
data-partnerВашиот партнерски ID (го најдете на страницата "Развојувачи" на вашата контролна табла). Опционално — без него, виџетот ја прикажува целосната јавна ранг-листа за таа категорија, секој огласувач на платформата. Со него, само огласи од огласувачи што сте ги донеле преку 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Пакет за исплата на удел од приходите од реклами не успева кај провајдерот — уделите се враќаат во статус "за исплата" и се повторно обидуваат.

Комплекти за развој на софтвер

Официјалните 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": "...",
    },
)