Annual Ads

Documentație pentru dezvoltatori

Dezvoltați direct pe platforma Annual Ads — creați conturi de agenți de publicitate, publicați anunțuri, inițiați plăți și monitorizați clasamentul, totul prin intermediul API-ului.

Consultați tabelul complet de prețuri

Păstrezi 70% din suma pe care o plătesc agenții de publicitate din modul Connect pentru reclamele lor — sumă care este transferată automat în portofelul tău. Vezi mai jos cum funcționează.

URL de bază

https://api.adhub365.com
OpenAPI 3

Autentificare

Fiecare solicitare este autentificată cu o cheie secretă din antetul „Authorization”, utilizând schema „Bearer”.

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

Mediul de testare și mediul de producție

Cheile din mediul de testare și cele din mediul de producție sunt complet izolate una de cealaltă — o cheie din mediul de testare nu poate niciodată să citească sau să scrie date create de o cheie din mediul de producție și viceversa.

Domenii de aplicare

Fiecare cheie este limitată la domeniile de aplicare pentru care a fost emisă — o cheie nu are niciodată un nivel de acces mai mare decât cel al contului partener care a creat-o.

Cheile API sunt emise conturilor partenerilor aprobați de către echipa Annual Ads.

Creați un cont de partener

Împărțirea veniturilor din publicitate

Dacă cheile tale API creează conturi de advertiser pentru propriii tăi utilizatori (modul Connect — vezi secțiunea „Autentificare” de mai sus), vei primi un procent din suma pe care acești advertiseri o plătesc pentru anunțurile lor. Procentajul de mai jos este citit în timp real de la același punct de acces, nu este niciodată codificat fix și este complet separat de comisionul de recomandare prezentat mai jos pe această pagină.

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

70%

E rândul tău

Suma se plătește automat în portofelul de plăți pe care l-ai configurat — nu este necesară nicio cerere de retragere.

30%

Se accesează secțiunea „Anunțuri anuale”

Acoperă moderarea, găzduirea și infrastructura de clasificare pe care rulează anunțurile tale.

Cum funcționează

  1. Unul dintre agenții de publicitate din modul „Connect” plătește pentru un anunț prin intermediul integrării tale.
  2. Anunțul este verificat și aprobat — automat sau de către echipa noastră de moderare.
  3. Cota ta se află în așteptare pentru a fi transferată automat în portofelul tău, conform aceluiași mecanism ca și în cazul programului de recomandări de mai jos.
O cotă nu este niciodată generată înainte ca anunțul să fie aprobat efectiv — dacă echipa de moderare îl respinge, nu se datorează nimic din suma respectivă. O completare a unui anunț deja activ nu prezintă un astfel de risc și este distribuită imediat.

Condiții de plată

  • În contul dvs. de partener este configurat un portofel pentru plăți în criptomonede.
  • Nu este necesară nicio procedură KYC din partea ta — contul tău de partener a fost deja verificat la momentul creării.

Exemplu: citirea acțiunilor acumulate

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
}

Puncte terminale

Conturi

POST/v1/partner/advertisers

Creați un cont de advertiser în numele unuia dintre utilizatorii dumneavoastră (modul Connect).

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

Căutați un cont de advertiser creat de acest partener.

advertisers:read

Reclame

POST/v1/partner/ads

Creați un anunț. Acesta apare inițial în stare de schiță. Câmpurile opționale „advertiser_type”, „promotion_type”, „link_type” și „promoted_brand” descriu tipurile de publicitate: de afiliere, de recomandare, de creator sau individuală — consultați nota de mai jos.

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

Caută un anunț.

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

Actualizați conținutul editorial — titlu, descriere, link, tipul de advertiser, tipul promoției, tipul linkului și marca promovată. Categoria, zona geografică și orice alte informații luate în considerare de motorul de clasificare nu pot fi modificate niciodată aici.

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

Încărcați direct o imagine pentru anunț (JPEG/PNG/WebP, maxim 5 MB). Este obligatoriu înainte de prima plată — consultați secțiunea „Plăți” de mai jos.

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

Setați imaginea unui anunț publicitar folosind o adresă URL, în loc să încărcați un fișier — serverul o preia și o găzduiește el însuși. Aceeași cerință: trebuie îndeplinită înainte de prima plată.

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

Poziția actuală, categoria și aria de acoperire geografică a unui anunț.

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

Numărul total de afișări și clicuri pentru un anunț — zilele scurse/rămase provin din câmpurile „activated_at” și „expires_at” existente deja în GET /{id}, iar poziția în clasament provine din GET /{id}/rank.

ads:read

Plăți

POST/v1/partner/payments

Inițiază o plată cu criptomonede pentru o achiziție inițială sau o reîncărcare. O plată inițială eșuează cu codul de eroare 422, cu excepția cazului în care anunțul conține deja o imagine — vezi uploadAdImage/setAdImageUrl mai sus.

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

Verificați starea unei plăți.

payments:read

Recomandări

POST/v1/partner/referrals

Creează un link de recomandare.

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

Veniturile cumulate din recomandări, defalcate în funcție de statut.

referrals:read

Împărțirea veniturilor din publicitate

GET/v1/partner/ad-revenue/earnings

Cota ta de 70% din suma plătită de agenții de publicitate pe care i-ai creat în modul „Connect” pentru anunțurile lor, defalcată în funcție de statut.

ad-revenue:read

Jurnal de acces

GET/v1/partner/access-log

Istoric complet al apelurilor pentru această cheie — metodă, cale, adresă IP, marcaj temporal.

Acolo

Puncte finale publice

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

Clasament numai pentru citire, pentru o categorie și o zonă geografică.

Public
GET/v1/tiers

Cele 7 niveluri de preț configurate (prag, beneficii deblocate).

Public
GET/v1/referral-program

Procentajele de comision valabile în prezent pentru sistemul de recomandări în cascadă și pentru Leaders Pool.

Public
GET/v1/partner-program

Repartizarea actuală a veniturilor din publicitate (modul Connect) între tine și Annual Ads.

Public
GET/v1/search?q={query}

Căutarea în limbaj natural — direcționează o interogare precum „agenții de publicitate din domeniul mobilierului din Kenya” către categoria și aria geografică corespunzătoare, apoi afișează clasamentul respectiv, în ordinea exactă reală.

Public

Publicitate prin programe de afiliere și recomandări

advertiser_type, promotion_type, link_type și promoted_brand sunt câmpuri opționale în cadrul cererilor POST și PATCH către /v1/partner/ads — Serviciul „Annual Ads” nu se limitează la companiile care își fac publicitate. Când link_type este affiliate_link sau referral_invitation_link, sau promotion_type este affiliate_offer sau referral_opportunity, affiliate_terms_accepted trebuie să fie true; în caz contrar, solicitarea este respinsă cu un cod de eroare 422. title are o limită maximă de 35 de caractere, iar description de 80 — ambele limite sunt impuse la nivel de server, nu doar în interfața de utilizare a tabloului de bord.

Instrumente de IA

Fiecare cont de advertiser beneficiază de un set de instrumente AI integrate — un generator de conținut și elemente vizuale pentru reclame, un asistent conversațional, un consilier în materie de buget și un auditor SEO extern — plătite cu credite AI, pe lângă tariful anual fix.

Acestea se execută prin intermediul datelor de autentificare ale panoului de control al agentului de publicitate (un token de acces pentru sesiune), nu printr-o cheie API de partener — o integrare terță parte nu le poate apela în numele agentului de publicitate.
POST/v1/advertisers/{id}/ai/assistant

Ask Annual Ads — un asistent conversațional flotant, cu rol pur informativ, care oferă acces doar în citire la datele contului.

Public
POST/v1/advertisers/{id}/ai/creative-studio

Generează un titlu, o descriere și cuvinte cheie pentru un anunț pe baza unei scurte descrieri a afacerii.

2 credite
POST/v1/advertisers/{id}/ai/creative-studio/image

Generează o imagine de prezentare (PNG) pe baza aceleiași descrieri a companiei, găzduită online și gata de a fi atașată la un anunț.

8 credite
POST/v1/advertisers/{id}/ai/budget-advisor

O proiecție statistică reală — niciodată o estimare aproximativă — a probabilității de a-și menține un anumit rang la 30, 90 și 365 de zile.

1 credite
POST/v1/advertisers/{id}/ai/seo-audit

Analizați site-ul web extern al agentului de publicitate și propuneți îmbunătățiri concrete în materie de SEO.

2 credite

Exemplu — generarea conținutului publicitar

Aceeași categorie și aceeași descriere a activității stau la baza generatorului de imagini de mai jos.

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
}

Generați un element vizual corespunzător pentru același anunț:

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

Plasează un bloc publicitar gata pregătit pe site-ul tău — fără etape de creare, fără iframe. Scriptul se afișează direct în pagină, într-un Shadow DOM izolat, astfel încât stilurile sale nu se transferă niciodată în site-ul tău, iar stilurile site-ului tău nu se transferă niciodată în acesta.

Adaugă-l pe pagina ta

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

În mod implicit, se afișează clasamentul public complet pentru categoria respectivă — toți agenții de publicitate de pe platformă, nu doar cei pe care i-ai adus tu. Pentru a afișa doar anunțurile agenților de publicitate pe care i-ai creat prin modul Connect (cei care îți generează comisionul), adaugă „data-partner” împreună cu ID-ul tău de partener (îl găsești pe pagina „Developers” din propriul tău panou de control):

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

Dacă anunțatorii tăi acoperă mai multe categorii, renunță complet la „data-category” — folosind doar „data-partner”, widgetul afișează toate anunțurile tale din toate categoriile într-o singură grilă, în loc să fie nevoie de un bloc de widget pentru fiecare categorie:

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

Vrei să ai un modul de tip „footer” alături de cel din conținut, fiecare afișând reclame diferite? Adaugă un al doilea bloc de widget cu atributul data-layout="compact" (o singură reclamă, care poate fi redusă la o „pilulă” mică) și setă atributul data-offset la numărul de reclame pe care le afișează deja primul tău 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>

Atribute

data-categoryID-ul categoriei care urmează să fie afișată. Obligatoriu — cu excepția cazului în care este setat „data-partner”; în acest caz, omiterea acestuia va duce la afișarea anunțurilor acelui partener în toate categoriile.
data-geoDomeniul de aplicare geografic: local, regional sau global. Valoarea implicită este „global”.
data-countNumărul de anunțuri care vor fi afișate. Valoarea implicită este 4.
data-columnsNumărul de coloane ale grilei. Valoarea implicită este 2.
data-layoutgrid, list sau compact. Implicit este setat la grid. Opțiunea compact afișează un singur anunț (valoarea atributului data-count este ignorată) împreună cu un buton care permite ascunderea acestuia într-o casetă mică și afișarea sa din nou — o unitate de tip subsol, care nu este niciodată poziționată fix de către script; poți plasa și stiliza elementul div container după cum dorești pe propria ta pagină.
data-offsetNumărul de anunțuri din top care trebuie sărite. Valoarea implicită este 0. Permite unui al doilea widget de pe aceeași pagină (de exemplu, unul compact în subsol și unul sub formă de grilă mai sus) să afișeze anunțuri diferite, în loc să repete același anunț de două ori — introduceți numărul de anunțuri pe care celălalt widget le afișează deja.
data-partnerID-ul tău de partener (îl găsești pe pagina „Dezvoltatori” din propriul tău panou de control). Opțional — fără acesta, widgetul afișează clasamentul public complet pentru categoria respectivă, incluzând toți agenții de publicitate de pe platformă. Cu acesta, se afișează doar anunțurile agenților de publicitate pe care i-ai adus prin modul Connect — cei care îți generează efectiv cota de profit.

Cota din venituri

Cum ajunge efectiv la un partener comisionul de recomandare — procentul, mecanismul de plată și condițiile prealabile.

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
}

Nu este un număr fix

Procentul comisioanelor este configurat de noi și se poate modifica — citiți-l întotdeauna în timp real de la acest punct de acces, în loc să introduceți o valoare fixă.

Complet automat

Nu există un termen limită pentru retragere. O sarcină programată calculează câștigurile care pot fi plătite, le grupează pe agenți de publicitate și le plătește automat odată ce sunt îndeplinite toate condițiile de mai jos.

Condiții de plată

  • Veniturile totale de încasat ale agentului de publicitate ating suma minimă de plată.
  • În contul lor este configurat un portofel pentru plăți în criptomonede.
  • Statutul lor KYC este verificat.

Exemplu: citirea profiturilor acumulate

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
}

Niveluri de preț (în vigoare)

Citește valorile în timp real de la acest punct de acces — nu introduce niciodată aceste valori în mod static, deoarece ele se pot modifica din partea noastră. Creați un selector de niveluri pentru utilizatorii dvs. în locul unui câmp pentru suma liberă: fiecare preț afișat reprezintă deja suma exactă care trebuie trimisă la efectuarea plății, iar beneficiile deblocate afișate aici le indică utilizatorilor exact ce primesc în schimbul acelui preț, astfel încât aceștia să aleagă un preț pe care îl înțeleg, în loc să ghicească o sumă.

NivelPrețDeblocări
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Link pe care se poate face clic
Gold$500.00

Animation unlocked

Link pe care se poate face clicAnimație
Platinum$1,000.00

Enhanced exposure

Link pe care se poate face clicAnimație
Diamond$2,500.00

Premium placement

Link pe care se poate face clicAnimație
Elite$5,000.00

Top-tier visibility

Link pe care se poate face clicAnimație
Legendary$10,000.00

Maximum visibility & branding

Link pe care se poate face clicAnimație

Limite de rată

Numărul de solicitări este limitat pe cheie, pe minut. Fiecare răspuns autentificat conține anteturile X-RateLimit-Limit, X-RateLimit-Remaining și X-RateLimit-Reset; depășirea limitei generează codul de eroare 429 Too Many Requests, împreună cu antetul Retry-After.

Lista albă de adrese IP

Opțional, pentru fiecare partener. Până când adaugi o intrare, cheile tale acceptă solicitări de la orice adresă IP — prima intrare comută toate cheile acelui partener în modul „numai lista de permisiuni”.

Webhooks

Fiecare webhook este semnat cu HMAC-SHA256 folosind un secret generat o singură dată, la momentul creării — verificați semnătura înainte de a considera încredibil conținutul. Evenimentele sunt transmise numai partenerului care deține advertiserul respectiv.

payment.succeededPlata a fost confirmată.
payment.refundedSe efectuează o rambursare.
ad.activatedUn anunț devine activ, fie automat, fie după verificarea efectuată de administrator.
invoice.issuedSe emite o factură.
referral.payout.completedUn comision de recomandare a atins statutul de „plătit”.
referral.payout.failedUn lot de plăți pentru recomandări eșuează la furnizor — sumele se întorc în contul de plăți și se încearcă din nou efectuarea plăților.
rank.changedPoziția unui anunț se modifică — inclusiv atunci când acest lucru este determinat de plata efectuată de un alt advertiser.
ad.expiring_soonCu 30, 7 sau 1 zi (zile) înainte de expirarea unui anunț.
partner_ad_revenue.payout.completedO plată din cota de venituri din publicitate atinge statutul de „plătită”.
partner_ad_revenue.payout.failedO tranzacție de plată a cotei din veniturile publicitare eșuează la furnizor — sumele revin în contul de plăți și se încearcă din nou efectuarea plății.

Kituri de dezvoltare software

Sunt prevăzute SDK-uri oficiale pentru JavaScript/TypeScript și Python, generate pe baza aceleiași specificații API, dar acestea nu au fost încă publicate — până atunci, accesați direct API-ul HTTP.

Ghid de pornire rapidă

Nu există încă un SDK — acestea accesează direct API-ul HTTP și funcționează deja în orice limbaj de programare.

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