Annual Ads

Geliştirici belgeleri

Annual Ads platformunda doğrudan çalışma — reklamverenler oluşturun, reklamları yayınlayın, ödemeleri başlatın ve sıralamayı takip edin; tüm bunları tamamen API aracılığıyla gerçekleştirin.

Fiyat tablosunun tamamını inceleyin

70%’si sizde kalır Connect modundaki reklamverenlerin reklamları için ödediği tutarın bir kısmı — otomatik olarak cüzdanınıza yatırılır. Nasıl çalıştığını aşağıda görebilirsiniz.

Ana URL

https://api.adhub365.com
OpenAPI 3

Kimlik Doğrulama

Her istek, Bearer şeması kullanılarak Authorization başlığındaki gizli anahtarla doğrulanır.

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

Test ortamı ve üretim ortamı

Sandbox ve üretim anahtarları birbirlerinden tamamen ayrılmıştır — bir sandbox anahtarı, üretim anahtarı tarafından oluşturulan verileri asla okuyamaz veya yazamaz; bunun tersi de geçerlidir.

Kapsamlar

Her anahtar, kendisine atandığı kapsamlarla sınırlıdır — bir anahtarın erişim yetkisi, onu oluşturan ortak hesabın erişim yetkisini asla aşmaz.

API anahtarları, Annual Ads ekibi tarafından onaylanmış iş ortağı hesaplarına verilir.

Ortak hesabı oluşturun

Reklam gelir paylaşımı

API anahtarlarınız kendi kullanıcılarınız için reklamveren hesapları oluşturuyorsa (Bağlantı modu — yukarıdaki “Kimlik Doğrulama” bölümüne bakın), bu reklamverenlerin reklamları için ödedikleri tutarın bir kısmını kazanırsınız. Aşağıdaki pay dağılımı, bu aynı uç noktadan gerçek zamanlı olarak okunur; hiçbir zaman sabit kodlanmaz ve bu sayfanın ilerleyen kısımlarında belirtilen yönlendirme komisyonundan tamamen ayrıdır.

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

70%

Sana gider

Ayarladığınız ödeme cüzdanınıza otomatik olarak yatırılır — para çekme talebinde bulunmanıza gerek yoktur.

30%

Yıllık Reklamlara Gidiyor

Reklamlarınızın yayınlandığı moderasyon, barındırma ve sıralama altyapısını kapsar.

Nasıl çalışır?

  1. Connect modundaki reklamverenlerinizden biri, entegrasyonunuz aracılığıyla bir reklam için ödeme yapıyor.
  2. Reklam, otomatik olarak ya da denetim ekibimiz tarafından incelenir ve onaylanır.
  3. Payınız, aşağıdaki tavsiye programındaki mekanizma ile aynı şekilde cüzdanınıza otomatik olarak ödenmek üzere sıraya alınmıştır.
Bir pay, reklam fiilen onaylanmadan asla oluşturulmaz — moderasyon ekibi reklamı reddederse, söz konusu ödemeyle ilgili herhangi bir yükümlülük doğmaz. Halihazırda aktif olan bir reklama yapılan ek ödeme bu tür bir risk taşımaz ve pay hemen dağıtılır.

Ödeme koşulları

  • Ortaklık hesabınızda bir kripto ödeme cüzdanı yapılandırılmıştır.
  • Sizin tarafınızdan herhangi bir KYC işlemi gerekmez — ortaklık hesabınız oluşturulurken zaten doğrulanmıştır.

Örnek: birikmiş hisselerin okunması

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
}

Uç noktalar

Hesaplar

POST/v1/partner/advertisers

Kullanıcılarınızdan birinin adına bir reklamveren hesabı oluşturun (Bağlantı modu).

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

Bu iş ortağı tarafından oluşturulan bir reklamveren hesabını arayın.

advertisers:read

Reklamlar

POST/v1/partner/ads

Bir reklam oluşturun. Reklam, taslak durumunda başlar. İsteğe bağlı olan advertiser_type, promotion_type, link_type ve promoted_brand alanları, ortaklık, yönlendirme, içerik üreticisi veya bireysel reklamcılığı tanımlar — aşağıdaki nota bakınız.

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

Bir ilanı inceleyin.

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

Yayın içeriğini güncelleyin — başlık, açıklama, bağlantı, reklamveren türü, tanıtım türü, bağlantı türü ve tanıtılan marka. Kategori, coğrafi bölge ve sıralama motoru tarafından okunan diğer tüm bilgiler buradan asla değiştirilemez.

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

Bir reklam görselini doğrudan yükleyin (JPEG/PNG/WebP, en fazla 5 MB). İlk ödeme yapılmadan önce zorunludur — aşağıdaki “Ödemeler” bölümüne bakınız.

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

Bir dosyayı yüklemek yerine bir reklamın görselini bir URL'den ayarlayın — sunucu görseli kendisi alır ve yeniden barındırır. Aynı şart geçerlidir: ilk ödemeden önce yapılması gerekir.

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

Bir reklamın mevcut sıralaması, kategorisi ve coğrafi kapsamı.

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

Bir reklamın toplam görüntüleme ve tıklama sayısı ile geçmiş/kalan gün sayısı, GET /{id} isteğinde zaten bulunan activated_at/expires_at alanlarından alınır; sıralama ise GET /{id}/rank isteğinden alınır.

ads:read

Ödemeler

POST/v1/partner/payments

İlk satın alma işlemi veya bakiye yüklemesi için bir kripto ödemesi başlatın. Reklamda halihazırda bir resim bulunmuyorsa, ilk ödeme 422 hatasıyla başarısız olur — yukarıdaki uploadAdImage/setAdImageUrl bölümüne bakın.

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

Bir ödemenin durumunu kontrol edin.

payments:read

Yönlendirmeler

POST/v1/partner/referrals

Bir yönlendirme bağlantısı oluşturun.

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

Duruma göre ayrılmış toplam tavsiye gelirleri.

referrals:read

Reklam gelir paylaşımı

GET/v1/partner/ad-revenue/earnings

Connect modunda oluşturduğunuz reklamverenlerin reklamları için ödedikleri tutarın %70’lik payınız, duruma göre ayrıntılı olarak.

ad-revenue:read

Erişim günlüğü

GET/v1/partner/access-log

Bu anahtara ait tam çağrı geçmişi — yöntem, yol, IP, zaman damgası.

Orada

Genel uç noktalar

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

Bir kategori ve coğrafi kapsam için salt okunur sıralama.

Genel
GET/v1/tiers

Yapılandırılmış 7 fiyatlandırma kademesi (eşik değer, kilidi açılmış avantajlar).

Genel
GET/v1/referral-program

Şu anda yönlendirme zinciri ve Liderler Havuzu için geçerli olan komisyon yüzdeleri.

Genel
GET/v1/partner-program

Sizinle Annual Ads arasındaki mevcut reklam geliri dağılımı (Connect modu).

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

Doğal dil araması — "Kenya'daki mobilya reklamcıları" gibi bir sorguyu uygun kategoriye ve coğrafi alana yönlendirir, ardından sıralamayı tam olarak gerçek sırasına göre döndürür.

Genel

Ortaklık ve tavsiye reklamcılığı

advertiser_type, promotion_type, link_type ve promoted_brand, /v1/partner/ads adresine yapılan POST ve PATCH isteklerinde isteğe bağlı alanlardır — Annual Ads, yalnızca kendi reklamlarını veren işletmelerle sınırlı değildir. link_type değeri affiliate_link veya referral_invitation_link olduğunda ya da promotion_type değeri affiliate_offer veya referral_opportunity olduğunda, affiliate_terms_accepted değeri true olmalıdır; aksi takdirde istek 422 hatasıyla reddedilir. title alanı en fazla 35 karakter, description alanı ise en fazla 80 karakter olabilir — her ikisi de sadece kontrol paneli kullanıcı arayüzünde değil, sunucu tarafında da uygulanır.

Yapay Zeka Araçları

Her reklamveren hesabına, sabit yıllık ücretin yanı sıra, AI kredileriyle ödenen bir dizi yerleşik AI aracı sunulur: bir reklam içeriği ve görsel oluşturucu, bir sohbet asistanı, bir bütçe danışmanı ve bir harici SEO denetçisi.

Bunlar, iş ortağı API anahtarı değil, reklamverenin kendi kontrol paneline giriş bilgileri (bir oturum erişim jetonu) aracılığıyla gerçekleştirilir; dolayısıyla, bir üçüncü taraf entegrasyonu bunları reklamverenin adına çağıramaz.
POST/v1/advertisers/{id}/ai/assistant

Ask Annual Ads — hesap verileri üzerinde yalnızca okuma erişimine sahip, sadece bilgi amaçlı çalışan bir yüzen konuşma asistanı.

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

Kısa bir işletme tanımından bir reklam başlığı, açıklaması ve anahtar kelimeler oluşturun.

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

Aynı işletme açıklamasından, barındırılmış ve bir ilana eklenmeye hazır bir ilan görseli (PNG) oluşturun.

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

30/90/365 gün sonra belirli bir sıralamayı koruma olasılığına ilişkin gerçek bir istatistiksel tahmin — asla keyfi bir tahminden ibaret değil.

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

Reklamverenin kendi harici web sitesini analiz edin ve somut SEO iyileştirmeleri önerin.

2 kredi

Örnek — reklam içeriği oluşturma

Aşağıdaki resim oluşturucuya da aynı kategori ve işletme açıklaması temel alınarak oluşturulmuştur.

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
}

Aynı reklam için uygun bir görsel oluşturun:

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

Hazır bir reklam birimini kendi sitenize sürükleyip bırakın — kurulum gerektirmez, iframe kullanmaya gerek yoktur. Komut dosyası, izole edilmiş bir Shadow DOM içinde doğrudan sayfaya yüklenir; bu sayede, reklam biriminin stilleri asla sitenize sızmaz ve sitenizin stilleri de reklam birimine sızmaz.

Sayfanıza ekleyin

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

Varsayılan olarak bu, kategorinin tam genel sıralamasını gösterir — sadece sizin platforma kazandırdıklarınız değil, platformdaki tüm reklamverenler. Yalnızca Connect modu aracılığıyla oluşturduğunuz reklamverenlerin reklamlarını (payınızı oluşturan reklamları) göstermek için, ortak kimliğinizi içeren “data-partner” özniteliğini ekleyin (bu kimliği kendi kontrol panelinizin Geliştiriciler sayfasında bulabilirsiniz):

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

Reklamverenleriniz birkaç kategoriye yayılıyorsa, “data-category” özniteliğini tamamen kaldırın — sadece “data-partner” özniteliği kullanıldığında, widget tüm kategorilerdeki reklamlarınızın her birini tek bir ızgarada gösterir; böylece her kategori için ayrı bir widget bloğu kullanmanıza gerek kalmaz:

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

İçerik içi reklam bloğunuzun yanında, her biri farklı reklamlar gösteren bir altbilgi tarzı reklam bloğu mu istiyorsunuz? data-layout="compact" (tek bir reklam, küçük bir hap şeklinde daraltılabilir) ve data-offset değeri ilk widget’ınızın halihazırda gösterdiği reklam sayısına ayarlanmış ikinci bir widget bloğu ekleyin:

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

Özellikler

data-categoryGörüntülenecek kategori kimliği. Zorunlu — “data-partner” ayarı yapılmamışsa; bu ayar yapıldığında ise bu alanın boş bırakılması, söz konusu iş ortağının reklamlarının tüm kategorilerde gösterileceği anlamına gelir.
data-geoCoğrafi kapsam: yerel, bölgesel veya küresel. Varsayılan ayar küreseldir.
data-countGösterilecek reklam sayısı. Varsayılan değer 4’tür.
data-columnsTablonun sütun sayısı. Varsayılan değer 2’dir.
data-layoutızgara, liste veya kompakt. Varsayılan ayar ızgaradır. “Kompakt” seçeneği, reklamı küçük bir hap şeklinde daraltıp geri getirmek için bir düğme içeren tek bir reklam gösterir (data-count değeri göz ardı edilir) — bu, altbilgi tarzında bir birimdir ve komut dosyası tarafından asla sabit konumlandırılmaz; konteyner div’ini kendi sayfanızda istediğiniz gibi yerleştirip stil verebilirsiniz.
data-offsetAtlanacak en üst sıradaki reklamların sayısı. Varsayılan değer 0’dır. Aynı sayfadaki ikinci bir widget’ın (örneğin, altbilgide yer alan kompakt bir widget ile daha yukarıda bulunan ızgara biçimindeki bir widget), aynı reklamı iki kez tekrarlamak yerine farklı reklamlar göstermesini sağlar — diğer widget’ın halihazırda gösterdiği reklam sayısını belirtin.
data-partnerOrtaklık kimliğiniz (kendi kontrol panelinizin “Geliştiriciler” sayfasında bulabilirsiniz). İsteğe bağlı — bu bilgi girilmezse, widget o kategorideki tam genel sıralamayı, yani platformdaki tüm reklamverenleri gösterir. Bu bilgi girildiğinde ise, yalnızca Connect modu aracılığıyla platforma kazandırdığınız reklamverenlerin reklamları gösterilir — yani size pay kazandıran reklamverenler.

Gelir payı

Bir iş ortağının tavsiye komisyonunun kendisine nasıl ulaştığı — yüzde oranı, ödeme mekanizması ve ön koşullar.

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
}

Sabit bir sayı değil

Komisyon yüzdesi tarafımızdan belirlenir ve değişebilir — bir değeri sabit olarak kodlamak yerine, her zaman bu uç noktadan gerçek zamanlı olarak kontrol edin.

Tam otomatik

Para çekme son tarihi yoktur. Zamanlanmış bir görev, ödenecek kazançları hesaplar, bunları reklamverenlere göre gruplandırır ve aşağıdaki tüm koşullar karşılandığında otomatik olarak ödeme yapar.

Ödeme koşulları

  • Reklamverenin ödenecek toplam kazancı, minimum ödeme tutarına ulaşır.
  • Hesaplarında bir kripto para ödeme cüzdanı yapılandırılmıştır.
  • KYC durumları doğrulanmıştır.

Örnek: birikmiş kârın okunması

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
}

Fiyatlandırma kademeleri (canlı)

Bu uç noktadan canlı olarak okuyun — bu değerleri asla sabit olarak kodlamayın; bunlar bizim tarafımızdan değiştirilebilir. Ücretsiz tutar alanı yerine kendi kullanıcılarınız için bir seviye seçici oluşturun: gösterilen her fiyat, ödeme oluşturulurken gönderilecek tam tutardır ve burada gösterilen kilidi açılmış avantajlar, kullanıcılara bu fiyat karşılığında ne elde edeceklerini tam olarak belirtir; böylece kullanıcılar bir rakam tahmin etmek yerine anladıkları bir fiyatı seçerler.

SeviyeFiyatKilit açma
Bronze$50.00

Basic visibility

Silver$300.00

Clickable link unlocked

Tıklanabilir bağlantı
Gold$500.00

Animation unlocked

Tıklanabilir bağlantıAnimasyon
Platinum$1,000.00

Enhanced exposure

Tıklanabilir bağlantıAnimasyon
Diamond$2,500.00

Premium placement

Tıklanabilir bağlantıAnimasyon
Elite$5,000.00

Top-tier visibility

Tıklanabilir bağlantıAnimasyon
Legendary$10,000.00

Maximum visibility & branding

Tıklanabilir bağlantıAnimasyon

Hız sınırları

İstekler, anahtar başına ve dakika başına bir sınırla kısıtlanmaktadır. Kimliği doğrulanmış her yanıtta X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıkları bulunur; sınırın aşılması durumunda, Retry-After başlığı içeren 429 Too Many Requests hatası döndürülür.

IP izin listesi

İsteğe bağlı, her bir iş ortağı için. Bir kayıt ekleyene kadar, anahtarlarınız herhangi bir IP adresinden gelen istekleri kabul eder — ilk kayıt, o iş ortağının tüm anahtarlarını yalnızca izin verilenler listesine göre çalışacak şekilde değiştirir.

Webhook'lar

Her webhook, oluşturulduğu anda tek seferlik olarak verilen bir gizli anahtar kullanılarak HMAC-SHA256 ile imzalanır — yük bilgisine güvenmeden önce imzayı doğrulayın. Olaylar, yalnızca ilgili reklamverenin sahibi olan iş ortağına iletilir.

payment.succeededÖdeme onaylandı.
payment.refundedGeri ödeme gerçekleştirilmiştir.
ad.activatedBir ilan, otomatik olarak ya da yönetici tarafından incelenmesinin ardından yayına girer.
invoice.issuedBir fatura düzenlenir.
referral.payout.completedBir tavsiye komisyonu “ödenmiş” durumuna ulaşır.
referral.payout.failedBir tavsiye ödemesi toplu işlemi sağlayıcıda başarısız olur — kazançlar “ödenecekler” hesabına geri döner ve işlem yeniden denenir.
rank.changedBir reklamın sıralaması değişebilir — başka bir reklamverenin yaptığı ödeme nedeniyle de dahil olmak üzere.
ad.expiring_soonBir ilanın süresinin dolmasından 30, 7 veya 1 gün önce.
partner_ad_revenue.payout.completedBir reklam gelir payı ödemesi, “ödenmiş” durumuna ulaşır.
partner_ad_revenue.payout.failedBir reklam gelir payı ödemesi, sağlayıcı tarafında başarısız olur — paylar “ödenecekler” listesine geri döner ve işlem yeniden denenir.

Yazılım Geliştirme Kitleri

Aynı API spesifikasyonundan oluşturulan resmi JavaScript/TypeScript ve Python SDK’ları planlanmaktadır ancak henüz yayınlanmamıştır — o zamana kadar HTTP API’sini doğrudan çağırınız.

Hızlı Başlangıç

Henüz bir SDK yok — bunlar HTTP API’sini doğrudan çağırıyor ve şu anda herhangi bir programlama dilinde çalışıyor.

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