Annual Ads

Dokumentace pro vývojáře

Vytvářejte přímo na platformě Annual Ads – zakládejte inzerenty, publikujte reklamy, iniciujte platby a sledujte pozice, a to vše prostřednictvím API.

Podívejte se na kompletní ceník

Zůstane vám 70 % z částky, kterou inzerenti v režimu Connect platí za své reklamy – částka se automaticky převádí do vaší peněženky. Níže se podívejte, jak to funguje.

Základní URL

https://api.adhub365.com
OpenAPI 3

Ověření

Každý požadavek je ověřován pomocí tajného klíče v hlavičce „Authorization“ s využitím schématu „Bearer“.

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

Testovací prostředí a produkční prostředí

Klíče pro testovací prostředí a produkční prostředí jsou od sebe zcela odděleny – klíč pro testovací prostředí nemůže nikdy číst ani zapisovat data vytvořená klíčem pro produkční prostředí a naopak.

Rozsahy

Každý klíč je omezen na rozsahy, pro které byl vydán – klíč nikdy nemá širší přístup než partnerský účet, který jej vytvořil.

API klíče vydává tým Annual Ads schváleným partnerským účtům.

Vytvořte si partnerský účet

Rozdělení výnosů z reklamy

Pokud vaše API klíče vytvářejí inzerentské účty pro vaše vlastní uživatele (režim Connect – viz část „Ověřování“ výše), získáváte podíl z částek, které tito inzerenti platí za své reklamy. Níže uvedené rozdělení se načítá v reálném čase z tohoto stejného koncového bodu, nikdy není pevně zakódováno a je zcela oddělené od provize za doporučení, o které se píše dále na této stránce.

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

70%

To je na tobě

Částka se automaticky vyplatí do vaší nastavené výplatní peněženky – není třeba podávat žádost o výběr.

30%

Přejít na výroční inzeráty

Zahrnuje moderování, provoz serverů a infrastrukturu pro řazení výsledků, na které se vaše reklamy zobrazují.

Jak to funguje

  1. Jeden z vašich inzerentů v režimu Connect zaplatí za reklamu prostřednictvím vaší integrace.
  2. Reklama je zkontrolována a schválena – buď automaticky, nebo naším moderátorským týmem.
  3. Váš podíl je zařazen do fronty pro automatickou výplatu do vaší peněženky, a to stejným způsobem jako v rámci níže uvedeného programu doporučení.
Podíl se nikdy nevytvoří dříve, než je reklama skutečně schválena – pokud ji moderátoři zamítnou, nevzniká z této platby žádný závazek. Dobití již aktivní reklamy s sebou takové riziko nenese a podíl se rozdělí okamžitě.

Podmínky výplaty

  • Na vašem partnerském účtu je nastavena peněženka pro výplaty v kryptoměnách.
  • Z vaší strany není vyžadováno žádné ověření totožnosti (KYC) – váš partnerský účet byl prověřen již při jeho založení.

Příklad: načtení počtu nahromaděných akcií

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
}

Koncové body

Účty

POST/v1/partner/advertisers

Vytvořte účet inzerenta jménem jednoho ze svých uživatelů (režim Connect).

advertisers:write
GET/v1/partner/advertisers/{id}

Vyhledejte inzerentský účet vytvořený tímto partnerem.

advertisers:read

Reklamy

POST/v1/partner/ads

Vytvořte reklamu. Zpočátku má status „koncept“. Volitelná pole `advertiser_type`, `promotion_type`, `link_type` a `promoted_brand` popisují, zda se jedná o partnerskou, referralovou, tvůrčí nebo individuální reklamu – viz poznámka níže.

ads:write
GET/v1/partner/ads/{id}

Vyhledat inzerát.

ads:read
PATCH/v1/partner/ads/{id}

Aktualizujte redakční obsah – název, popis, odkaz, typ inzerenta, typ propagace, typ odkazu a propagovanou značku. Kategorie, geografické údaje a veškeré údaje, které čte systém pro určování pořadí, zde nelze nikdy změnit.

ads:write
POST/v1/partner/ads/{id}/image

Nahrajte obrázek inzerátu přímo (formát JPEG/PNG/WebP, max. 5 MB). Je nutné provést před první platbou – viz část o platbách níže.

ads:write
POST/v1/partner/ads/{id}/image-url

Nastavte obrázek reklamy pomocí URL adresy namísto nahrání souboru – server jej sám stáhne a umístí na svůj server. Platí stejný požadavek: je nutné provést před první platbou.

ads:write
GET/v1/partner/ads/{id}/rank

Aktuální pozice, kategorie a geografický dosah reklamy.

ads:read
GET/v1/partner/ads/{id}/stats

Celkový počet zobrazení a kliknutí na reklamu – počet uplynulých/zbývajících dnů pochází z polí `activated_at` a `expires_at`, která jsou již obsažena v požadavku GET /{id}, a pořadí pochází z požadavku GET /{id}/rank.

ads:read

Platby

POST/v1/partner/payments

Zahajte kryptoměnovou platbu za první nákup nebo dobití. První platba selže s chybou 422, pokud reklama ještě neobsahuje obrázek – viz výše uvedené funkce uploadAdImage/setAdImageUrl.

payments:write
GET/v1/partner/payments/{id}

Zkontrolujte stav platby.

payments:read

Doporučení

POST/v1/partner/referrals

Vytvořte odkaz pro doporučení.

referrals:write
GET/v1/partner/referrals/{code}/earnings

Kumulativní výdělky z doporučení, rozčleněné podle statusu.

referrals:read

Rozdělení výnosů z reklamy

GET/v1/partner/ad-revenue/earnings

Váš 70% podíl z částek, které inzerenti, které jste vytvořili v režimu Connect, zaplatili za své reklamy, rozčleněný podle stavu.

ad-revenue:read

Protokol přístupů

GET/v1/partner/access-log

Úplná historie volání pro tento klíč – metoda, cesta, IP adresa, časové razítko.

Tam

Veřejné koncové body

GET/v1/rankings?category={id}&geo={scope}

Žebříček pouze pro čtení pro danou kategorii a geografickou oblast.

Veřejné
GET/v1/tiers

7 nastavených cenových úrovní (prahová hodnota, odemčené výhody).

Veřejné
GET/v1/referral-program

Procentní sazby provizí, které jsou v současné době platné pro systém kaskádového doporučování a program Leaders Pool.

Veřejné
GET/v1/partner-program

Aktuální rozdělení výnosů z reklamy (režim Connect) mezi vás a Annual Ads.

Veřejné
GET/v1/search?q={query}

Vyhledávání v přirozeném jazyce – dotaz typu „inzerenti nábytku v Keni“ nasměruje do odpovídající kategorie a geografického rozsahu a následně vrátí výsledek seřazený přesně v tom pořadí, v jakém se skutečně objevil.

Veřejné

Partnerská a doporučovací reklama

advertiser_type, promotion_type, link_type a promoted_brand jsou volitelná pole při odesílání požadavků POST a PATCH na adresu /v1/partner/ads — Služba Annual Ads není omezena pouze na firmy, které inzerují samy sebe. Pokud je hodnota pole link_type affiliate_link nebo referral_invitation_link, nebo je hodnota pole promotion_type affiliate_offer nebo referral_opportunity, musí být hodnota pole affiliate_terms_accepted true, jinak bude požadavek odmítnut s kódem 422. Délka pole title je omezena na 35 znaků a pole description na 80 znaků – obě omezení jsou vynucována na straně serveru, nikoli pouze v uživatelském rozhraní řídicího panelu.

Nástroje umělé inteligence

Každý inzerentský účet má k dispozici sadu integrovaných nástrojů založených na umělé inteligenci – generátor obsahu a vizuálních prvků reklam, konverzačního asistenta, poradce pro rozpočet a externího auditora SEO –, které se hradí pomocí kreditů na umělou inteligenci, a to nad rámec paušálního ročního poplatku.

Tyto funkce se spouštějí prostřednictvím přihlašovacích údajů do vlastního řídicího panelu inzerenta (tokenu pro přístup k relaci), nikoli pomocí partnerského klíče API – integrace třetí strany je nemůže vyvolat jménem inzerenta.
POST/v1/advertisers/{id}/ai/assistant

Zeptejte se Annual Ads – plovoucího konverzačního asistenta, který slouží pouze k informačním účelům a má přístup k údajům o účtu pouze v režimu pro čtení.

Veřejné
POST/v1/advertisers/{id}/ai/creative-studio

Na základě krátkého popisu firmy vygenerujte název inzerátu, popis a klíčová slova.

2 kredit(ů)
POST/v1/advertisers/{id}/ai/creative-studio/image

Vygenerujte vizuální prvek inzerátu (PNG) na základě stejného popisu firmy, který je již připraven k připojení k inzerátu.

8 kredit(ů)
POST/v1/advertisers/{id}/ai/budget-advisor

Skutečná statistická prognóza – nikoli odhad založený na generativním modelu – pravděpodobnosti udržení daného umístění po 30, 90 a 365 dnech.

1 kredit(ů)
POST/v1/advertisers/{id}/ai/seo-audit

Proveďte analýzu externích webových stránek inzerenta a navrhněte konkrétní zlepšení v oblasti SEO.

2 kredit(ů)

Příklad – generování obsahu reklamy

Stejná kategorie a popis činnosti slouží také jako podklad pro níže uvedený generátor obrázků.

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
}

Vytvořte odpovídající vizuál pro stejnou reklamu:

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
}

Widget

Vložte hotový reklamní blok na svůj web – bez nutnosti vytváření, bez iframe. Skript se vykresluje přímo na stránce v izolovaném Shadow DOM, takže jeho styly nikdy neovlivní váš web a styly vašeho webu nikdy neovlivní ten jeho.

Přidejte si to na svou stránku

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

Ve výchozím nastavení se zde zobrazuje kompletní veřejné žebříčky pro danou kategorii – tedy všichni inzerenti na platformě, nejen ti, které jste přivedli. Chcete-li zobrazit pouze reklamy od inzerentů, které jste získali prostřednictvím režimu Connect (tedy těch, kteří generují váš podíl), přidejte atribut `data-partner` s vaším partnerským ID (najdete ho na stránce „Developers“ ve vašem vlastním dashboardu):

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

Pokud vaši inzerenti spadají do několika kategorií, vynechte atribut `data-category` úplně – pokud použijete pouze atribut `data-partner`, widget zobrazí všechny vaše reklamy ze všech kategorií v jedné mřížce, místo aby byl pro každou kategorii potřeba jeden blok widgetu:

<div
  class="annualads-widget"
  data-geo="global"
  data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>

Chcete vedle widgetu v obsahu mít ještě jeden ve stylu zápatí, přičemž každý z nich bude zobrazovat jiné reklamy? Přidejte druhý blok widgetu s atributem data-layout="compact" (jedna reklama, kterou lze sbalit do malého rámečku) a atributem data-offset nastaveným na počet reklam, které již zobrazuje váš první widget:

<!-- 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>

Atributy

data-categoryID kategorie, která se má zobrazit. Povinné – pokud není nastaven parametr „data-partner“, v takovém případě jeho vynechání způsobí, že se reklamy daného partnera zobrazí ve všech kategoriích.
data-geoGeografický rozsah: místní, regionální nebo globální. Výchozí nastavení je globální.
data-countPočet reklam, které se mají zobrazit. Výchozí hodnota je 4.
data-columnsPočet sloupců mřížky. Výchozí hodnota je 2.
data-layoutmřížka, seznam nebo kompaktní zobrazení. Výchozí nastavení je mřížka. Kompaktní zobrazení zobrazuje jednu reklamu (atribut `data-count` se ignoruje) s tlačítkem, pomocí kterého ji lze sbalit do malého modulu a znovu rozbalit — jedná se o prvek ve stylu zápatí, který skript sám nikdy neumisťuje jako fixní; umístění a styl kontejnerového prvku `div` si na své stránce můžete nastavit podle libosti.
data-offsetPočet nejlépe hodnocených reklam, které se mají přeskočit. Výchozí hodnota je 0. Umožňuje, aby druhý widget na stejné stránce (např. kompaktní widget v zápatí a mřížkový widget výše na stránce) zobrazoval jiné reklamy, místo aby se stejná reklama opakovala dvakrát – zadejte počet reklam, které již druhý widget zobrazuje.
data-partnerVaše partnerské ID (najdete ho na stránce „Developers“ ve svém ovládacím panelu). Volitelné — bez něj widget zobrazuje úplné veřejné pořadí v dané kategorii, tedy všechny inzerenty na platformě. S ním se zobrazují pouze reklamy od inzerentů, které jste přivedli prostřednictvím režimu Connect — tedy těch, kteří vám skutečně generují podíl.

Podíl na tržbách

Jak se provize za doporučení partnerovi skutečně dostane – procentní sazba, způsob výplaty a podmínky.

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
}

Nejde o pevně stanovené číslo

Procentní sazba provize je nastavena na naší straně a může se měnit – vždy ji načtěte v reálném čase z tohoto koncového bodu, místo abyste hodnotu pevně zakódovali.

Plně automatický

Neexistuje žádný termín pro výběr prostředků. Naplánovaná úloha vypočítá splatné výdělky, seskupí je podle jednotlivých inzerentů a automaticky je vyplatí, jakmile budou splněny všechny níže uvedené podmínky.

Podmínky výplaty

  • Celková částka výdělků inzerenta, která má být vyplacena, dosáhla minimální částky pro výplatu.
  • Na jejich účtu je nastavena peněženka pro výplaty v kryptoměnách.
  • Jejich status KYC je ověřen.

Příklad: výpis nahromaděných výdělků

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
}

Cenové úrovně (v provozu)

Čtěte hodnoty přímo z tohoto koncového bodu – tyto hodnoty nikdy nezadávejte pevně, protože se mohou z naší strany změnit. Vytvořte pro své uživatele výběr cenových úrovní namísto pole pro volbu částky: každá zobrazená cena již představuje přesnou částku, kterou je třeba odeslat při vytváření platby, a zde zobrazené odemčené výhody uživatelům přesně sdělují, co za danou cenu získají, takže si vyberou cenu, které rozumějí, místo aby hádali částku.

ÚroveňCenaOdemyká
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Klikatelný odkaz
Gold$500.00

Animation unlocked

Klikatelný odkazAnimace
Platinum$1,000.00

Enhanced exposure

Klikatelný odkazAnimace
Diamond$2,500.00

Premium placement

Klikatelný odkazAnimace
Elite$5,000.00

Top-tier visibility

Klikatelný odkazAnimace
Legendary$10,000.00

Maximum visibility & branding

Klikatelný odkazAnimace

Limity rychlosti

Počet požadavků je omezen na klíč za minutu. Každá ověřená odpověď obsahuje hlavičky X-RateLimit-Limit, X-RateLimit-Remaining a X-RateLimit-Reset; při překročení limitu je vrácen kód 429 Too Many Requests s hlavičkou Retry-After.

Seznam povolených IP adres

Volitelné, pro každého partnera. Dokud nepřidáte žádný záznam, vaše klíče přijímají požadavky z jakékoli IP adresy – první záznam přepne všechny klíče daného partnera do režimu „pouze povolené adresy“.

Webhooky

Každý webhook je podepsán pomocí algoritmu HMAC-SHA256 s využitím tajného klíče, který se generuje jednorázově při jeho vytvoření – předtím, než důvěřujete obsahu, ověřte podpis. Události jsou doručovány pouze partnerovi, který je vlastníkem příslušného inzerenta.

payment.succeededPlatba byla potvrzena.
payment.refundedVrácení peněz bylo provedeno.
ad.activatedInzerát se zveřejní, a to buď automaticky, nebo po schválení správcem.
invoice.issuedJe vystavena faktura.
referral.payout.completedProvize za doporučení dosáhla stavu „vyplacená“.
referral.payout.failedDávka výplat za doporučení selhala u poskytovatele – výnosy se vrátily do položky „k výplatě“ a bude proveden nový pokus o jejich vyplacení.
rank.changedPořadí reklamy se mění – mimo jiné i v případě, že k tomu dojde v důsledku platby jiného inzerenta.
ad.expiring_soon30, 7 nebo 1 den (dny) před vypršením platnosti inzerátu.
partner_ad_revenue.payout.completedVýplata podílu na příjmech z reklamy dosáhla stavu „vyplaceno“.
partner_ad_revenue.payout.failedHromadná výplata podílu na výnosech z reklamy selhala na straně poskytovatele – podíly se vrátily do položky „k výplatě“ a bude se o výplatu znovu pokusit.

Sady pro vývoj softwaru

Oficiální sady SDK pro JavaScript/TypeScript a Python, vygenerované na základě této specifikace API, jsou v plánu, ale zatím nebyly zveřejněny – do té doby využívejte přímo HTTP API.

Rychlý start

Zatím není k dispozici žádné SDK – tyto funkce volají přímo HTTP API a fungují již dnes v jakémkoli programovacím jazyce.

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": "...",
    },
)