Bou direk op die Annual Ads-platform — skep adverteerders, publiseer advertensies, inisieer betalings en hou rangsporing by, heeltemal via die API.
Sien die volledige prysroosterJy behou 70% van wat jou Connect-modus-adverteerders vir hul advertensies betaal — outomaties in jou beursie betaal. Sien hieronder hoe dit werk.
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/jsonAPI-sleutels word deur die Jaarlikse Adverteer-span aan goedgekeurde vennootrekeninge uitgereik.
Skep 'n vennootrekening| POST | /v1/partner/advertisersSkep '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 |
| POST | /v1/partner/adsSkep '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}/imageLaai '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-urlStel '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}/rankHuidige rang, kategorie en geografiese omvang vir 'n advertensie. | ads:read |
| GET | /v1/partner/ads/{id}/statsTotaal 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 |
| POST | /v1/partner/paymentsBegin '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 |
| POST | /v1/partner/referralsSkep 'n verwysingskakel. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsKumulatiewe verwysingsverdienste, opgedeel volgens status. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsJou 70%-aandeel van wat die adverteerders wat jy in Connect-modus geskep het, vir hul advertensies betaal het, opgedeel volgens status. | ad-revenue:read |
| GET | /v1/partner/access-logVolledige oproepgeskiedenis vir hierdie sleutel — metode, pad, IP, tydstempel. | Daar |
| GET | /v1/rankings?category={id}&geo={scope}Slegs-lees ranglys vir 'n kategorie en geoskoop. | Openbaar |
| GET | /v1/tiersDie 7 gekonfigureerde prysvlakke (drempel, ontsluit voordele). | Openbaar |
| GET | /v1/referral-programDie kommissiepersentasies wat tans aktief is vir die verwysingskaskade en die Leierspoel. | Openbaar |
| GET | /v1/partner-programDie 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.
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.
| POST | /v1/advertisers/{id}/ai/assistantAsk Annual Ads — 'n drywende gesprekassistent, slegs inligting, lees-slegs op rekeningdata. | Openbaar |
| POST | /v1/advertisers/{id}/ai/creative-studioGénereer 'n advertensietitel, ‑beskrywing en ‑sleutelwoorde uit 'n kort besigheidsbeskrywing. | 2 krediet(e) |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageGé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-auditOntleed die adverteerder se eie eksterne webwerf en stel konkrete SEO-verbeterings voor. | 2 krediet(e) |
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
}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.
<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>data-category | Kategorie-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-geo | Geo-omvang: plaaslik, streeksgewys of wêreldwyd. Standaard is wêreldwyd. |
data-count | Aantal advertensies om te wys. Standaard is 4. |
data-columns | Aantal roosterkolomme. Standaard 2. |
data-layout | rooster, 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-offset | Aantal 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-partner | Jou 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. |
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.
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.
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.changed | Die rangorde van 'n advertensie verander — ook wanneer 'n betaling deur 'n ander adverteerder dit veroorsaak. |
ad.expiring_soon | 30, 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. |
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.
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": "...",
},
)