Annual Ads

Ontwikkelaar-dokumentasie

Bou direk op die Annual Ads-platform — skep adverteerders, publiseer advertensies, inisieer betalings en hou rangsporing by, heeltemal via die API.

Sien die volledige prysrooster

Jy behou 70% van wat jou Connect-modus-adverteerders vir hul advertensies betaal — outomaties in jou beursie betaal. Sien hieronder hoe dit werk.

Basislink

https://api.adhub365.com
OpenAPI 3

Verifikasie

Elke versoek word geverifieer met 'n geheime sleutel in die Authorization-kop, deur die Bearer-skema te gebruik.

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

Sandput en produksie

Sandbox- en produksiesleutels is heeltemal van mekaar geïsoleer — 'n sandbox-sleutel kan nooit data lees of skryf wat deur 'n produksiesleutel geskep is nie, en andersom.

Bereike

Elke sleutel is beperk tot die omvang(e) waarvoor dit uitgereik is — 'n sleutel het nooit meer toegang as die partnerrekening wat dit geskep het nie.

API-sleutels word deur die Jaarlikse Adverteer-span aan goedgekeurde vennootrekeninge uitgereik.

Skep 'n vennootrekening

Advertensie-inkomsteverdeling

As jou API-sleutels advertensie-rekeninge vir jou eie gebruikers skep (Konneksie-modus — sien Outentikasie hierbo), verdien jy 'n deel van wat daardie adverteerders vir hul advertensies betaal. Die onderstaande verdeling word regstreeks vanaf dieselfde eindpunt gelees, nooit hardgecodeer nie, en is heeltemal afsonderlik van die verwysingskommissie verder onderaan hierdie bladsy.

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

70%

Gaan na jou

Outomaties betaal aan jou gekonfigureerde uitbetalingsbeursie — geen onttrekkingsversoek nodig nie.

30%

Gaan na Jaarlikse Adverte

Dek moderering, gasheem en die rangorde-infrastruktuur waarop jou advertensies loop.

Hoe dit werk

  1. Een van jou Connect-modus-adverteerders betaal vir 'n advertensie via jou integrasie.
  2. Die advertensie word hersien en goedgekeur — outomaties, of deur ons modereringspan.
  3. Jou aandeel is in die ry vir outomatiese uitbetaling na jou beursie, dieselfde meganisme as die verwysingsprogram hieronder.
'n Aandeel word nooit geskep voordat die advertensie werklik goedgekeur is nie — as moderering dit verwerp, is daar niks verskuldig op daardie betaling nie. 'n Top-up op 'n reeds aktiewe advertensie hou geen sodanige risiko in nie en word onmiddellik gedeel.

Uitbetalingsvoorwaardes

  • 'n kripto-uitbetalingsbeursie is op jou vennootrekening gekonfigureer.
  • Geen KYC word aan jou kant vereis nie — jou vennootrekening is reeds by die skepping geverifieer.

Voorbeeld: lees opgehoopte aandele

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
}

Eindpunte

Rekeninge

POST/v1/partner/advertisers

Skep 'n adverteerderrekening namens een van jou gebruikers (Konneksie-modus).

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

Soek 'n adverteerderrekening op wat deur hierdie vennoot geskep is.

advertisers:read

Advertensies

POST/v1/partner/ads

Skep 'n advertensie. Dit begin in konsepstatus. Opsionele advertensietype-, promosietype-, skakeltipe- en bevorderde handelsmerkvelde beskryf geaffilieerde, verwysings-, skepper- of individuele advertensies — sien die nota hieronder.

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

Soek 'n advertensie op.

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

Werk die redaksionele inhoud by — titel, beskrywing, skakel, adverteerder-tipe, promosietipe, skakeltipe en bevorderde handelsmerk. Kategorie, geografie en enigiets wat deur die rangorde-enjin gelees word, kan hier nooit verander word nie.

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

Laai 'n advertensiebeeld direk op (JPEG/PNG/WebP, maks. 5 MB). Vereis voor die eerste betaling — sien die betalingsgroep hieronder.

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

Stel 'n advertensie se beeld in vanaf 'n URL in plaas daarvan om 'n lêer op te laai — die bediener haal dit op en hergas dit self. Dieselfde vereiste: benodig voor die eerste betaling.

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

Huidige rang, kategorie en geografiese omvang vir 'n advertensie.

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

Totaal kyke en klikke vir 'n advertensie — dae verby/oorspronklik kom uit die activated_at/expires_at-velde wat reeds beskikbaar is op GET /{id}, en die rang kom van GET /{id}/rank.

ads:read

Betalings

POST/v1/partner/payments

Begin 'n kripto-betaling vir 'n aanvanklike aankoop of 'n aanvulling. 'n Aanvanklike betaling misluk met 422, tensy die advertensie reeds 'n beeld het — sien hierbo uploadAdImage/setAdImageUrl.

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

Kontroleer die status van 'n betaling.

payments:read

Verwysings

POST/v1/partner/referrals

Skep 'n verwysingskakel.

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

Kumulatiewe verwysingsverdienste, opgedeel volgens status.

referrals:read

Advertensie-inkomsteverdeling

GET/v1/partner/ad-revenue/earnings

Jou 70%-aandeel van wat die adverteerders wat jy in Connect-modus geskep het, vir hul advertensies betaal het, opgedeel volgens status.

ad-revenue:read

Toegangslog

GET/v1/partner/access-log

Volledige oproepgeskiedenis vir hierdie sleutel — metode, pad, IP, tydstempel.

Daar

Openbare eindpunte

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

Slegs-lees ranglys vir 'n kategorie en geoskoop.

Openbaar
GET/v1/tiers

Die 7 gekonfigureerde prysvlakke (drempel, ontsluit voordele).

Openbaar
GET/v1/referral-program

Die kommissiepersentasies wat tans aktief is vir die verwysingskaskade en die Leierspoel.

Openbaar
GET/v1/partner-program

Die huidige advertensie-inkomsteverdeling (Connect-modus) tussen jou en Annual Ads.

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

Natuurlike-taalsoektog — lei 'n navraag soos "meubeladvertiseerders in Kenia" na die ooreenstemmende kategorie en geografiese omvang, en gee dan daardie ranglys terug in sy presiese werklike volgorde.

Openbaar

Geaffilieerde en verwysingsadvertensies

advertiser_type, promotion_type, link_type, en promoted_brand is opsionele velde op POST en PATCH /v1/partner/ads — Annual Ads is nie beperk tot besighede wat hulself adverteer nie. Wanneer link_type affiliate_link of referral_invitation_link is, of promotion_type affiliate_offer of referral_opportunity is, moet affiliate_terms_accepted waar wees, anders word die versoek met 'n 422 verwerp. title is beperk tot 35 karakters en description tot 80 — beide word aan bedienerskant afgedwing, nie net in die dashboard-UI nie.

KI-gereedskap

Elke adverteerderrekening kry 'n stel ingeboude KI-gereedskap — 'n advertensie-inhoud- en visuele generator, 'n gesprekassistent, 'n begrotingsadviseur en 'n eksterne SEO-ouditeur — wat betaal word met KI-krediete bo-op die vaste jaarlikse prys.

Hierdie word via die adverteerder se eie dashboard-aanmelding ('n sessie-toegangsbewys) gebruik, nie via 'n vennoot-API-sleutel nie — 'n derdeparty-integrasie kan dit nie namens die adverteerder aanroep nie.
POST/v1/advertisers/{id}/ai/assistant

Ask Annual Ads — 'n drywende gesprekassistent, slegs inligting, lees-slegs op rekeningdata.

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

Génereer 'n advertensietitel, ‑beskrywing en ‑sleutelwoorde uit 'n kort besigheidsbeskrywing.

2 krediet(e)
POST/v1/advertisers/{id}/ai/creative-studio/image

Génereer 'n lysvisual (PNG) uit dieselfde besigheidsbeskrywing, gehost en gereed om aan 'n advertensie aan te heg.

8 krediet(e)
POST/v1/advertisers/{id}/ai/budget-advisor

'n werklike statistiese projeksie — nooit 'n generatiewe raaiskoot nie — van die kanse om 'n gegewe rang op 30/90/365 dae te behou.

1 krediet(e)
POST/v1/advertisers/{id}/ai/seo-audit

Ontleed die adverteerder se eie eksterne webwerf en stel konkrete SEO-verbeterings voor.

2 krediet(e)

Voorbeeld — genereer advertensie-inhoud

Dieselfde kategorie en beskrywing van die besigheid dryf ook die beeldgenerator hieronder aan.

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
}

Génereer 'n ooreenstemmende visuele vir dieselfde advertensie:

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

Laat 'n kant-en-klare advertensie-eenheid op jou eie webwerf val — geen opboustap, geen iframe nie. Die skrip render direk in die bladsy binne 'n geïsoleerde Shadow DOM, sodat die style daarvan nooit na jou webwerf lek nie, en die style van jou webwerf nooit daarin lek nie.

Voeg dit by jou bladsy

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

Standaard wys dit die volledige openbare ranglys vir die kategorie — elke adverteerder op die platform, nie net dié wat jy ingebring het nie. Om slegs die advertensies van adverteerders wat jy via Connect-modus geskep het (dié wat jou aandeel genereer) te wys, voeg data-partner saam met jou vennoot-ID by (vind dit op die Ontwikkelaarsbladsy van jou eie dashbord):

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

As jou adverteerders oor verskeie kategorieë strek, laat data-category heeltemal weg — met slegs data-partner wys die widget al jou advertensies oor alle kategorieë in een rooster, in plaas daarvan om per kategorie 'n widgetblok te benodig:

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

Wil jy 'n voetskrif-styl-eenheid langs jou in-inhoud-eenheid hê, elk met verskillende advertensies? Voeg 'n tweede widgetblok by met data-layout="compact" ('n enkele advertensie, in 'n klein pil ineenklapbaar) en stel data-offset in op hoeveel advertensies jou eerste widget reeds wys:

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

Eienskappe

data-categoryKategorie-ID om te vertoon. Vereis — tensy data-partner ingestel is, in welk geval die weglating daarvan daardie vennoot se advertensies in elke kategorie vertoon.
data-geoGeo-omvang: plaaslik, streeksgewys of wêreldwyd. Standaard is wêreldwyd.
data-countAantal advertensies om te wys. Standaard is 4.
data-columnsAantal roosterkolomme. Standaard 2.
data-layoutrooster, lys of kompak. Standaard is rooster. Kompak wys 'n enkele advertensie (data-count word geïgnoreer) met 'n knoppie om dit in 'n klein pil te vou en weer uit te vou — 'n voetskrif-styl eenheid, nooit deur die skrip self vasgeposisioneer nie; jy plaas en styl die houer-div soos jy wil op jou eie bladsy.
data-offsetAantal topgegradeerde advertensies om oor te slaan. Standaard 0. Laat 'n tweede widget op dieselfde bladsy (bv. 'n kompakte in die voetskrif en 'n rooster-een verder bo) ander advertensies wys in plaas daarvan om dieselfde een twee keer te herhaal — gee die aantal advertensies wat die ander widget reeds wys.
data-partnerJou vennoot-ID (vind dit op die Ontwikkelaars-bladsy van jou eie dashboard). Opsioneel — sonder dit wys die widget die volledige openbare ranglys vir daardie kategorie, elke adverteerder op die platform. Met dit wys dit slegs advertensies van adverteerders wat jy via Connect-modus ingebring het — dié wat werklik jou aandeel genereer.

Inkomsteverdeling

Hoe 'n vennoot se verwysingskommissie eintlik by hulle uitkom — die persentasie, die uitbetalingsmeganisme en die voorwaardes.

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
}

Nie 'n vaste getal nie

Die kommissiepersentasie is aan ons kant gekonfigureer en kan verander — lees dit altyd regstreeks vanaf hierdie eindpunt in plaas daarvan om 'n waarde vas te kodeer.

Voloutomaties

Daar is geen onttrekkingspunt nie. 'n Gedefinieerde taak genereer betaalbare inkomste, groepeer dit per adverteerder en betaal dit outomaties uit sodra aan al die onderstaande voorwaardes voldoen is.

Uitbetalingsvoorwaardes

  • Die adverteerder se totale betaalbare verdienste bereik die minimum uitbetalingsbedrag.
  • 'n kripto-uitbetalingsbeursie is op hul rekening gekonfigureer.
  • Hul KYC-status is geverifieer.

Voorbeeld: lees opgehoopte verdienste

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
}

Prysklasse (lewendig)

Lees regstreeks vanaf hierdie eindpunt — moenie hierdie waardes ooit hardkodeer nie, hulle kan aan ons kant verander. Bou 'n vlakkiezer vir jou eie gebruikers in plaas van 'n vrye bedragveld: elke prys wat gewys word, is reeds die presiese bedrag wat gestuur moet word wanneer die betaling geskep word, en die ontslote voordele wat hier gewys word, vertel gebruikers presies wat daardie prys vir hulle inhou, sodat hulle 'n prys kies wat hulle verstaan in plaas daarvan om 'n nommer te raai.

VlakPrysOntgrendel
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Klikbare skakel
Gold$500.00

Animation unlocked

Klikbare skakelAnimasie
Platinum$1,000.00

Enhanced exposure

Klikbare skakelAnimasie
Diamond$2,500.00

Premium placement

Klikbare skakelAnimasie
Elite$5,000.00

Top-tier visibility

Klikbare skakelAnimasie
Legendary$10,000.00

Maximum visibility & branding

Klikbare skakelAnimasie

Ratelimiete

Versoeke is per sleutel per minuut beperk. Elke geverifieerde antwoord dra die X-RateLimit-Limit-, X-RateLimit-Remaining- en X-RateLimit-Reset-kopvelde; as die limiet oorskry word, word 429 Te Baie Versoeke teruggestuur met 'n Retry-After-kopveld.

IP-toelaatlys

Opsioneel, per vennoot. Totdat jy 'n inskrywing byvoeg, aanvaar jou sleutels versoeke van enige IP-adres — die eerste inskrywing skakel al die sleutels van daardie vennoot oor na slegs toegelate adresse.

Webhake

Elke webhook word met HMAC-SHA256 onderteken deur gebruik te maak van 'n geheime sleutel wat eenmalig by die skepping uitgereik is — verifieer die handtekening voordat jy die lading vertrou. Gebeure word slegs aan die vennoot gelewer wat die betrokke adverteerder besit.

payment.succeeded'n betaling is bevestig.
payment.refunded'n Terugbetaling word uitgevoer.
ad.activated'n advertensie word aktief, outomaties of na administratiewe hersiening.
invoice.issued'n faktuur word uitgereik.
referral.payout.completed'n verwysingskommissie bereik betaalde status.
referral.payout.failed'n verwysingsbetalingslot misluk by die verskaffer — inkomste keer terug na betaalbaar en word weer probeer.
rank.changedDie rangorde van 'n advertensie verander — ook wanneer 'n betaling deur 'n ander adverteerder dit veroorsaak.
ad.expiring_soon30, 7 of 1 dag(e) voordat 'n advertensie verstryk.
partner_ad_revenue.payout.completed'n advertensie-inkomste-deling-uitbetaling bereik betaalde status.
partner_ad_revenue.payout.failed'n advertensie-inkomste-deling-uitbetaling-batch misluk by die verskaffer — aandele keer terug na betaalbaar en word weer probeer.

Sagtewareontwikkelingsstelle

Amptelike JavaScript/TypeScript- en Python-SDK's, gegenereer uit dieselfde API-spesifikasie, is beplan maar nog nie gepubliseer nie — gebruik intussen die HTTP-API direk.

Snelle begin

Nog geen SDK nie — hierdie roep die HTTP-API direk aan en werk vandag in enige taal.

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