Bygg direkte på Annual Ads-plattformen – opprett annonsører, publiser annonser, utløs betalinger og følg med på rangeringen, alt via API-et.
Se den fullstendige prisoversiktenDu beholder 70 % av det annonsørene dine i Connect-modus betaler for annonsene sine – beløpet blir automatisk satt inn på lommeboken din. Se hvordan det fungerer nedenfor.
Hver forespørsel autentiseres med en hemmelig nøkkel i «Authorization»-overskriften, ved hjelp av «Bearer»-ordningen.
POST https://api.adhub365.com/v1/partner/ads
Authorization: Bearer sk_sandbox_...
Content-Type: application/jsonAPI-nøkler utstedes til godkjente partnerkontoer av Annual Ads-teamet.
Opprett en partnerkonto| POST | /v1/partner/advertisersOpprett en annonsørkonto på vegne av en av brukerne dine (Connect-modus). | advertisers:write |
| GET | /v1/partner/advertisers/{id}Søk etter en annonsørkonto opprettet av denne partneren. | advertisers:read |
| POST | /v1/partner/adsOpprett en annonse. Den opprettes først som utkast. De valgfrie feltene «advertiser_type», «promotion_type», «link_type» og «promoted_brand» beskriver henholdsvis affiliate-, henvisnings-, skaper- eller individuell annonsering – se merknaden nedenfor. | ads:write |
| GET | /v1/partner/ads/{id}Slå opp en annonse. | ads:read |
| PATCH | /v1/partner/ads/{id}Oppdater redaksjonelt innhold – tittel, beskrivelse, lenke, annonsørtype, kampanjetype, lenketype og markedsført merke. Kategori, geografisk område og alt annet som leses av rangeringmotoren, kan aldri endres her. | ads:write |
| POST | /v1/partner/ads/{id}/imageLast opp et annonsebilde direkte (JPEG/PNG/WebP, maks. 5 MB). Dette må gjøres før den første betalingen — se avsnittet om betalinger nedenfor. | ads:write |
| POST | /v1/partner/ads/{id}/image-urlAngi bildet til en annonse ved hjelp av en URL i stedet for å laste opp en fil – serveren henter og legger det ut på egen hånd. Samme krav: må gjøres før den første betalingen. | ads:write |
| GET | /v1/partner/ads/{id}/rankGjeldende rangering, kategori og geografisk dekningsområde for en annonse. | ads:read |
| GET | /v1/partner/ads/{id}/statsTotalt antall visninger og klikk for en annonse — antall dager som har gått/gjenstår hentes fra feltene `activated_at` og `expires_at` som allerede finnes i GET /{id}, mens rangeringen hentes fra GET /{id}/rank. | ads:read |
| POST | /v1/partner/paymentsStart en kryptovaluta-betaling for et første kjøp eller en påfylling. En første betaling mislykkes med feilkode 422 med mindre annonsen allerede har et bilde — se uploadAdImage/setAdImageUrl ovenfor. | payments:write |
| GET | /v1/partner/payments/{id}Sjekk statusen på en betaling. | payments:read |
| POST | /v1/partner/referralsOpprett en henvisningslenke. | referrals:write |
| GET | /v1/partner/referrals/{code}/earningsSamlet inntekt fra henvisninger, fordelt etter status. | referrals:read |
| GET | /v1/partner/ad-revenue/earningsDin andel på 70 % av det annonsørene du opprettet i Connect-modus betalte for annonsene sine, fordelt etter status. | ad-revenue:read |
| GET | /v1/partner/access-logFullstendig anropshistorikk for denne nøkkelen — metode, sti, IP-adresse, tidsstempel. | Der |
| GET | /v1/rankings?category={id}&geo={scope}Skrivebeskyttet rangering for en kategori og et geografisk område. | Offentlig |
| GET | /v1/tiersDe 7 konfigurerte prisnivåene (terskel, tilgjengelige fordeler). | Offentlig |
| GET | /v1/referral-programProvisjonssatsene som for øyeblikket gjelder for henvisningskaskaden og Leaders Pool. | Offentlig |
| GET | /v1/partner-programDen nåværende fordelingen av annonseinntekter (Connect-modus) mellom deg og Annual Ads. | Offentlig |
| GET | /v1/search?q={query}Søk i naturlig språk — videresender et søk som «møbelannonsører i Kenya» til den aktuelle kategorien og det aktuelle geografiske området, og viser deretter rangeringen i nøyaktig den rekkefølgen den foreligger. | Offentlig |
Affiliate- og henvisningsannonsering
advertiser_type, promotion_type, link_type og promoted_brand er valgfrie felt ved POST- og PATCH-forespørsler til /v1/partner/ads — Annual Ads er ikke begrenset til bedrifter som annonserer for seg selv. Når link_type er affiliate_link eller referral_invitation_link, eller promotion_type er affiliate_offer eller referral_opportunity, må affiliate_terms_accepted være true, ellers avvises forespørselen med en 422-feil. title har en begrensning på 35 tegn og description på 80 – begge håndheves på serversiden, ikke bare i brukergrensesnittet på dashbordet.
Hver annonsørkonto får tilgang til en rekke innebygde AI-verktøy – en generator for annonseinnhold og grafikk, en samtaleassistent, en budsjettrådgiver og en ekstern SEO-revisor – som betales med AI-kreditter, i tillegg til den faste årsprisen.
| POST | /v1/advertisers/{id}/ai/assistantSpør Annual Ads — en flytende samtaleassistent, kun til informasjonsformål, med skrivebeskyttet tilgang til kontodata. | Offentlig |
| POST | /v1/advertisers/{id}/ai/creative-studioGenerer en annonsetittel, beskrivelse og søkeord ut fra en kort beskrivelse av virksomheten. | 2 studiepoeng |
| POST | /v1/advertisers/{id}/ai/creative-studio/imageLag et bilde av oppføringen (PNG) basert på den samme bedriftsbeskrivelsen, som er lagret og klart til å legges ved en annonse. | 8 studiepoeng |
| POST | /v1/advertisers/{id}/ai/budget-advisorEn reell statistisk prognose — aldri et gjetning — av sannsynligheten for å beholde en gitt rangering etter 30, 90 og 365 dager. | 1 studiepoeng |
| POST | /v1/advertisers/{id}/ai/seo-auditAnalyser annonsørens egen eksterne nettside og foreslå konkrete SEO-forbedringer. | 2 studiepoeng |
Den samme kategorien og virksomhetsbeskrivelsen ligger også til grunn for bildegeneratoren nedenfor.
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
}Lag et tilhørende bilde til den samme annonsen:
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
}Legg inn en ferdiglaget annonseenhet på din egen nettside – uten å måtte bygge noe selv og uten iframe. Skriptet vises direkte på siden inne i et isolert Shadow DOM, slik at stilene fra annonseenheten aldri påvirker nettstedet ditt, og stilene fra nettstedet ditt aldri påvirker annonseenheten.
<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>Som standard vises her den fullstendige offentlige rangeringen for kategorien – alle annonsører på plattformen, ikke bare de du har hentet inn. For å vise kun annonsene fra annonsører du har opprettet via Connect-modus (de som genererer andelen din), legger du til «data-partner» med partner-ID-en din (du finner den på «Utviklere»-siden i ditt eget 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>Hvis annonsørene dine spenner over flere kategorier, bør du fjerne «data-category» helt — med bare «data-partner» viser widgeten alle annonsene dine på tvers av alle kategoriene i ett rutenett, i stedet for at du trenger én widgetblokk per kategori:
<div
class="annualads-widget"
data-geo="global"
data-partner="YOUR_PARTNER_ID"
></div>
<script async src="https://adhub365.com/widget.js"></script>Vil du ha en enhet i bunntekststil ved siden av den som vises i innholdet, slik at hver av dem viser forskjellige annonser? Legg til en ny widgetblokk med data-layout="compact" (én enkelt annonse, som kan skjules til en liten «pille») og data-offset satt til antall annonser som den første widgeten din allerede viser:
<!-- 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 | Kategori-ID som skal vises. Obligatorisk — med mindre «data-partner» er angitt; i så fall vil utelatelse av dette føre til at annonsene til den aktuelle partneren vises i alle kategorier. |
data-geo | Geografisk omfang: lokalt, regionalt eller globalt. Standardinnstillingen er globalt. |
data-count | Antall annonser som skal vises. Standardverdien er 4. |
data-columns | Antall kolonner i rutenettet. Standardverdien er 2. |
data-layout | rutenett, liste eller kompakt. Standardinnstillingen er rutenett. «kompakt» viser én enkelt annonse (data-count ignoreres) med en knapp for å skjule den i en liten boks og vise den igjen – en enhet i fotnote-stil som aldri plasseres fast av selve skriptet; du kan plassere og utforme container-div-en akkurat slik du ønsker på din egen side. |
data-offset | Antall topprangerte annonser som skal hoppes over. Standardverdien er 0. Dette gjør at en annen widget på samme side (f.eks. en kompakt widget i bunnteksten og en rutenett-widget lenger oppe) kan vise forskjellige annonser i stedet for å gjenta den samme to ganger – angiv antallet annonser som den andre widgeten allerede viser. |
data-partner | Partner-ID-en din (du finner den på «Utviklere»-siden i ditt eget dashbord). Valgfritt – uten denne viser widgeten den fullstendige offentlige rangeringen for den aktuelle kategorien, med alle annonsører på plattformen. Med denne vises kun annonser fra annonsører du har hentet inn via Connect-modus – altså de som faktisk genererer din andel. |
Det er satt en grense for antall forespørsler per nøkkel per minutt. Hvert godkjent svar inneholder overskriftene X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Reset. Hvis grensen overskrides, returneres feilkoden 429 Too Many Requests sammen med overskriften Retry-After.
Valgfritt, per partner. Inntil du legger til en oppføring, godtar nøklene dine forespørsler fra alle IP-adresser — den første oppføringen endrer alle nøklene til den aktuelle partneren slik at de kun tillater tilgang fra adresser på tillatelseslisten.
Hver webhook signeres med HMAC-SHA256 ved hjelp av en hemmelig nøkkel som utstedes én gang ved opprettelsen – sjekk signaturen før du stoler på innholdet. Hendelser leveres kun til den partneren som eier den tilknyttede annonsøren.
payment.succeeded | En betaling er bekreftet. |
payment.refunded | En refusjon er gjennomført. |
ad.activated | En annonse blir aktivert, enten automatisk eller etter at en administrator har vurdert den. |
invoice.issued | Det utstedes en faktura. |
referral.payout.completed | En henvisningsprovisjon har nådd statusen «betalt». |
referral.payout.failed | En utbetalingsbatch for henvisninger mislykkes hos leverandøren – inntektene føres tilbake til utestående beløp og forsøkes på nytt. |
rank.changed | En annonses rangering endres – blant annet når en annen annonsørs betaling fører til dette. |
ad.expiring_soon | 30, 7 eller 1 dag(er) før en annonse utløper. |
partner_ad_revenue.payout.completed | En utbetaling av andel av annonseinntekter har fått statusen «betalt». |
partner_ad_revenue.payout.failed | En batch med utbetalinger av andel av annonseinntekter mislykkes hos leverandøren — andelene føres tilbake til utestående beløp og forsøkes på nytt. |
Offisielle SDK-er for JavaScript/TypeScript og Python, som er generert ut fra denne API-spesifikasjonen, er planlagt, men er ennå ikke publisert — bruk HTTP-API-et direkte inntil da.
Det finnes ikke noe SDK ennå — disse kaller HTTP-API-et direkte og fungerer allerede i dag uansett hvilket språk man bruker.
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": "...",
},
)