Belgeler

API belgeleri

Panelin yaptığı her şey HTTP üzerinden kullanılabilir. Bir SMM panelini tek bir uç noktaya yönlendirin ya da tüm platformu — katalog, kampanyalar, kayıtlar, faturalar — bir betikten veya bir yapay zekâ ajanından yönetin.

Bu sayfada

Genel bakış

Toplistbot iki HTTP API sunar. İkisi de HTTPS üzerinden JSON konuşur, ikisi de aynı token bakiyesini harcar ve herhangi biri paneli hiç açmadan kampanya yürütmeye yeter.

Temel URL

Base URL
https://backend.toplistbot.com/api
https://backend.toplistbot.com

Aşağıdaki referans bu iki alan adına göre yazılmıştır. Hangisini kullandığınız kimlik doğrulama biçimini belirler — Kimlik doğrulama bölümüne bakın.

Başlangıç

Yeni bir hesaptan çalışan bir kampanyaya beş adımda. Aşağıdakilerin tamamı en hızlı yol olan SMM uç noktasını kullanır; JWT aldıktan sonra platform API'si de aynı şekilde çalışır.

  1. Hesap oluşturun

    Kaydolun ve e-postanızı doğrulayın. Doğrulama, bakiyenize 100 ücretsiz jeton ekler; bu, hiçbir şey harcamadan gerçek bir kampanya yürütmenize yeter.

  2. API anahtarınızı kopyalayın

    Kontrol panelinizi açın ve bir API anahtarı oluşturun. Ona bir parola gibi davranın — jeton bakiyenizi harcar. İstediğiniz zaman yenileyebilirsiniz; bu, eskisini anında geçersiz kılar.

  3. İstediğiniz hizmeti bulun

    Sipariş verebileceğiniz tüm siteleri listeleyin. Her kayıtta sayısal bir hizmet kimliği ve 1.000 işlem başına jeton cinsinden bir oran bulunur. Tanıtım yapmak istediğiniz sitenin kimliğini not edin.

    cURL
    curl -X POST https://backend.toplistbot.com/api/v2 -d "key=YOUR_API_KEY" -d "action=services"
  4. İlk siparişinizi verin

    Hizmet kimliğini, kampanyanın çalışacağı URL'yi ve kaç işlem yürütüleceğini gönderin. Ücret anında düşülür ve yanıt size bir sipariş kimliği verir.

    cURL
    curl -X POST https://backend.toplistbot.com/api/v2 \
      -d "key=YOUR_API_KEY" \
      -d "action=add" \
      -d "service=9" \
      -d "link=https://arena-top100.com/index.php?a=in&u=yourserver" \
      -d "quantity=1000"
  5. Teslimatı takip edin

    Ne kadarının tamamlandığını görmek için sipariş kimliğini sorgulayın. Akıştan memnun kaldığınızda aynı çağrıları kendi panelinize veya betiklerinize bağlayın.

    cURL
    curl -X POST https://backend.toplistbot.com/api/v2 -d "key=YOUR_API_KEY" -d "action=status" -d "orders=184223"

Perfect Panel kurulumunu bağlama

Perfect Panel veya uyumlu SMM panel yazılımı kullanıyorsanız kod yazmanıza gerek yok — Toplistbot'u bu ayarlarla sağlayıcı olarak ekleyin ve hizmet listesini içe aktarın.

API URL'si
https://backend.toplistbot.com/api/v2
API anahtarı
YOUR_API_KEY
HTTP yöntemi
POST

Ölçeği büyütmeden önce bağlantı biçiminizin kabul edildiğini doğrulamak için tek bir sitede küçük bir miktarla başlayın. Hatalı bir bağlantı da jeton harcar.

Yapay zekâ ajanıyla otomatikleştirin

Bu sayfanın makineler için yazılmış düz metin bir ikizi var. Bir ajana o adresi ve API anahtarınızı verin, ihtiyacı olan her şey elinde olur: uç nokta listesinin tamamı, istek ve yanıt biçimleri, fiyat hesabı, hata kodları ve baştan sona örnekler.

Makine tarafından okunabilir referans

Tek belge, kimlik doğrulama yok, JavaScript yok. İndirin, bir isteme yapıştırın veya adresi gezinebilen bir araca verin.

https://toplistbot.com/llms.txt

Başlangıç istemi

Bunu Claude'a veya HTTP isteği yapabilen herhangi bir ajana yapıştırın. Anahtarı mesajın içine değil, bir ortam değişkenine koyun.

Prompt
Read https://toplistbot.com/llms.txt — it is the complete Toplistbot API reference.

My API key is in the TOPLISTBOT_KEY environment variable. Using the API-key
surface (paths without the /api prefix):

  1. list the sites in the catalog that cost under 20 tokens per 1,000 votes
  2. tell me my token balance
  3. propose a campaign for <my vote URL> that fits a budget of <N> tokens

Do not place the order until I confirm the cost.

Bir ajan için doğru kimlik bilgisi API anahtarıdır: süresi dolmaz, iki adımlı doğrulamadan etkilenmez ve gerekirse panelden döndürmek erişimi anında iptal eder.

Kimlik doğrulama

İki kimlik bilgisi var ve hangisine ihtiyacınız olduğu uç noktaya değil yola bağlı. Neredeyse her uç nokta iki kez bağlanmıştır.

Kimlik bilgisini /api öneki belirler

Her iki yolun arkasında aynı işleyici var. /api önekini kaldırın, platform API'si uzun ömürlü bir API anahtarı kabul eder; bırakın, uç nokta girişten alınan bir JWT bekler.

YolKimlik bilgisiŞunun için
/api/orders/getAllJWTBir insanın giriş yaptığı her şey
/orders/getAllAPI anahtarıBetikler, zamanlanmış görevler, ajanlar

Otomasyon için öneksiz yolları tercih edin. Giriş yok, süre dolması yok, canlı tutulacak oturum yok — tek anahtar her şeyi yapar ve iki adımlı doğrulama asla yolunuza çıkmaz.

API anahtarı

Anahtarınızı herhangi bir istekte `key` alanı olarak gönderin: sorgu parametresi, form alanı, JSON alanı veya `Authorization: Bearer` başlığı. Panelden üretin ve döndürün. /api/v2 adresine yapılan bir GET ok durumu döner ve bir anahtarın geçerli olup olmadığını ucuza kontrol etmenin yoludur.

cURL
# any of these three carry the key
curl "https://backend.toplistbot.com/orders/getAll?key=YOUR_API_KEY"
curl -X POST https://backend.toplistbot.com/orders/pause -d "key=YOUR_API_KEY" -d "id=184223"
curl https://backend.toplistbot.com/orders/getAll -H "Authorization: Bearer YOUR_API_KEY"
Health check
curl https://backend.toplistbot.com/api/v2?key=YOUR_API_KEY

JWT

Token almak için giriş yapın, sonra /api yollarında bearer token olarak gönderin. Tokenların süresi dolar, bu yüzden dolmadan önce /auth/refresh çağırın. Hesapta iki adımlı doğrulama açıksa giriş ayrıca `two_factor_code` ister.

Login
curl -X POST https://backend.toplistbot.com/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","password":"..."}'
Response
{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "token_type": "bearer",
  "expires_in": 3600,
  "user": { "id": 4211, "email": "[email protected]", "tokens": 528.41, "...": "..." }
}
Authenticated request
curl https://backend.toplistbot.com/api/orders/getAll \
  -H "Authorization: Bearer YOUR_JWT"

Tarayıcıdan çağırmak

Bütün yollar Access-Control-Allow-Origin başlığını serbest bırakarak yanıt verir; yani bir sayfa, bir tarayıcı eklentisi ya da tarayıcıda çalışan bir ajan API'yi doğrudan çağırabilir, kendi vekil sunucunuza gerek yok. Yukarıdaki uyarı hâlâ geçerli: tarayıcıya gönderdiğiniz anahtar yayımlanmış anahtardır, dolayısıyla bu kendi araçlarınız içindir, herkese açık bir sayfa için değil.

JavaScript
// Works from a page, an extension, or a browser-based agent.
const sites = await fetch(
  'https://backend.toplistbot.com/orders/getAllWebsites'
).then(r => r.json())

API anahtarınız gerçek token bakiyesi harcar. Sunucu tarafında tutun: tarayıcıya gönderilen veya bir depoya işlenen her anahtar ele geçmiş sayılmalı ve panelden döndürülmelidir.

Jetonlar ve fiyatlandırma

Kampanyalar önceden satın alınan jetonlarla ödenir. Her site bir oran yayımlar — orada 1.000 kampanya işlemi yürütmenin kaç jetona mal olduğu — services eyleminde `rate` olarak döner.

Cost formula
cost_in_tokens = (rate * quantity) / 1000

Oranı 13 olan bir site 1.000 işlem için 13 jetona mal olur; dolayısıyla 500'lük bir sipariş 6,5 jeton tutar. Ücret sipariş kabul edildiğinde düşülür ve iptal, harcanmayan kalanı iade eder.

balance ve status yanıtları Perfect Panel uyumluluğu için USD para birimi alanı bildirir, ancak değer dolar değil jeton bakiyesidir. Sayıyı jeton olarak değerlendirin.

SMM panel API'si

Her şeyi tek bir uç nokta yürütür. İşlemi seçmek için her POST isteğiyle bir `action` alanı gönderin; her istek ayrıca `key` değerinizi taşır.

POSThttps://backend.toplistbot.com/api/v2
EylemParametreler
services
addservice, link, quantity, interval?
statusorders
balance
cancelorders

`refill` ve `refill_status` uyumluluk için kabul edilir ve ikisi de "uygulanmadı" yanıtı verir. Burada hiçbir şey yeniden doldurulamaz; yeni sipariş verin.

action=services

Sipariş verebileceğiniz tüm siteleri, güncel oranları ve sınırlarıyla listeler. add çağrılarınızda `service` kimliğini kullanın.

cURL
curl -X POST https://backend.toplistbot.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=services"
Response
[
  {
    "service": 9,
    "name": "arena-top100.com 1000 upvotes",
    "type": "Default",
    "category": "Votes",
    "rate": 15,
    "min": 1,
    "max": 50000,
    "refill": false,
    "cancel": true
  }
]

`rate`, 1.000 işlem başına jetondur. Her hizmet için `min` 1, `max` 50000'dir.

action=add

Bir kampanya oluşturur ve ücretini bakiyenizden anında düşer.

ParametreTürAçıklama
keyzorunlustringAPI anahtarınız.
actionzorunlustring`add` olmalıdır.
servicezorunluintegerservices eyleminden gelen hizmet kimliği.
linkzorunluurlKampanyanın çalışacağı URL. Geçerli bir URL olmalıdır.
quantityzorunluintegerYürütülecek işlem sayısı, 1 ile 50000 arasında.
intervalintegerSaat başına işlem. Varsayılan 15, üst sınır 4000 ve sitenin kendi azami değerini aşamaz.
cURL
curl -X POST https://backend.toplistbot.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=add" \
  -d "service=9" \
  -d "link=https://arena-top100.com/index.php?a=in&u=yourserver" \
  -d "quantity=1000" \
  -d "interval=60"
Response
{
  "order_id": 184223
}

action=status

Bir veya daha fazla siparişin ilerlemesini döndürür. Düz bir nesne için tek kimlik, ya da virgülle ayrılmış bir liste gönderin.

cURL
curl -X POST https://backend.toplistbot.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=status" \
  -d "orders=184223"
Response — single order
{
  "charge": 13.5,
  "start_count": 0,
  "status": "Completed",
  "remains": 1000,
  "currency": "USD"
}

Birden fazla kimlikte yanıt sipariş kimliğine göre anahtarlanır; bilinmeyen veya size ait olmayan siparişler tüm isteği başarısız kılmak yerine bir hata kaydı döndürür.

Response — multiple orders
{
  "184223": { "charge": 13.5, "start_count": 0, "status": "Completed", "remains": 1000, "currency": "USD" },
  "184224": { "error": "Incorrect order ID" }
}

`status` değil, `remains` okuyun

`status` her zaman düz "Completed" değerindedir. Alan, her Perfect Panel istemcisi istediği için vardır ve paneller başka her değeri yeniden doldurma adayı sayar — bu platformun sunmadığı bir şey. İlerleme sayılarda: `remains` teslim edilmeyi bekleyen kabul edilmiş oy sayısıdır, yani `remains == 0` siparişin bittiği anlamına gelir. `start_count` şu ana kadar teslim edileni, `charge` ise maliyeti gösterir. İkisi de sitenin kabul oranına göre ölçülür, yani ham denemeleri değil satın aldığınız oyları sayar.

`status` ve `cancel` çağrı başına en fazla 100 sipariş kimliği kabul eder. Döngü kurmak yerine toplu gönderin: 100 kimlikli tek çağrı, iki taraf için de 100 çağrıdan çok daha ucuzdur.

action=balance

Kalan jeton bakiyenizi döndürür.

cURL
curl -X POST https://backend.toplistbot.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=balance"
Response
{
  "balance": 528.41,
  "currency": "USD"
}

action=cancel

Bir siparişi durdurur ve harcanmayan kalanı bakiyenize iade eder. Tamamlanmış siparişler iptal edilemez.

cURL
curl -X POST https://backend.toplistbot.com/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=cancel" \
  -d "orders=184223,184224"
Response
[
  { "order": "184223", "cancel": 1, "refund": 4.5 },
  { "order": "184224", "cancel": { "error": "Incorrect order ID" } }
]

Platform API'si

Panelin kullandığı REST API'nin aynısı. Aşağıdaki yollar API anahtarı biçiminde, /api öneki olmadan yazılmıştır. Oturum biçimi için başına /api ekleyip anahtarı bir JWT ile değiştirin; JWT işaretli uç noktalar yalnızca /api altında vardır.

Katalog ve keşif

Herkese açık, kimlik bilgisi gerekmez. Başlanacak uç nokta getAllWebsites: bir siparişi fiyatlandırmak ve boyutlandırmak için gereken kimlik, fiyat, saatlik tavan ve kabul oranını taşır.

  • GET/orders/getAllWebsitesHerkese açıkTüm katalog: her site, ücretleri, limitleri ve üst verileriyle
  • GET/orders/getAllBasicWebsitesDetailsHerkese açıkRastgele 20 site adı; bileşenler ve otomatik tamamlama için
  • POST/orders/getWebsiteDetailsByNameHerkese açıkTam ada göre tek site
  • POST/products/getSuggestionsHerkese açıkBir kimlik kümesiyle ilişkili siteler
  • GET/products/demand?days=30Herkese açıkHer sitenin son dönemde ne kadar sipariş aldığı
  • GET/products/tokensHerkese açıkSatın alabileceğiniz token paketleri
  • POST/products/suggestAPI anahtarıYeni bir site eklememizi isteyin
  • GET/api/news/timelineHerkese açıkÜrün değişiklik günlüğü
cURL
curl "https://backend.toplistbot.com/orders/getAllWebsites"

Daha azını isteyin

Katalogun tamamı 396 site için yaklaşık 665 KB tutar ve bunun yarısını asla sipariş vermeyeceğiniz iki alan oluşturur: saklanan bir popülerlik JSON bloğu ve pazarlama açıklaması. Yalnızca sipariş verirken kullandığınız alanlara indirip pasif siteleri eleyince yaklaşık 40 KB'a düşer.

cURL + jq
# The whole catalog is ~665 KB across 396 sites.
# Projected to what you actually order with: ~40 KB.
curl -s "https://backend.toplistbot.com/orders/getAllWebsites" \
  | jq '[.[]
      | select(.active == 1)
      | {id, name, price_per_1000, max_per_hour, accept_rate, subscribeable}]'

Bir yapay zekâ ajanı için bu, kabaca 170.000 token ile 10.000 token arasındaki fark demek: ilk çağrının çalışması ile bağlam penceresini tüketmesi arasındaki fark. Ayrıştırmadan önce süzün.

Hesap ve oturumlar

Kayıt için tarayıcı gerekir: bir Cloudflare doğrulamasıyla korunur. app.toplistbot.com üzerinden bir kez kayıt olun, sonrasındaki her şeyi otomatikleştirin.

  • POST/api/auth/registerHerkese açıkHesap oluştur: yalnızca tarayıcıdan, captcha korumalı
  • POST/api/auth/loginHerkese açıkKimlik bilgilerini JWT ile değiştir
  • POST/api/auth/refreshJWTSüresi dolan bir JWT'den yenisini üret
  • POST/api/auth/logoutJWTGeçerli JWT'yi geçersiz kıl
  • GET/api/auth/user-profileJWTOturum açmış hesap; bakiye ve API anahtarıyla
  • GET/api/userJWTAynı kullanıcı nesnesi, daha kısa bir yolda
  • GET/api/api_tokenAPI anahtarıBir API anahtarını sahibine çöz: anahtar doğrulamak için kullanın
  • POST/api/auth/reset-api-keyJWTAPI anahtarını döndür; eskisi anında ölür
  • POST/api/auth/fingerprintJWTHesaba bir tarayıcı parmak izi kaydet
  • POST/api/auth/ipJWTHesabın güncel IP'sini kaydet
  • POST/api/auth/forgot-passwordHerkese açık60 dakika geçerli bir sıfırlama bağlantısı gönder
  • POST/api/auth/reset-passwordHerkese açıkE-postayla gelen token ile yeni parola belirle

İki adımlı doğrulama ve giriş

İki adımlı doğrulama parola girişini korur. API anahtarları için geçerli değildir; gözetimsiz işler için anahtarın daha iyi bir kimlik bilgisi olmasının nedeni budur.

  • POST/api/2fa/enableJWTKaydı başlat: gizli anahtarı, QR adresini ve kurtarma kodlarını döner
  • POST/api/2fa/verifyJWTAltı haneli kodu doğrula ve iki adımlı doğrulamayı aç
  • POST/api/2fa/disableJWTİki adımlı doğrulamayı kapat
  • POST/api/account/verification/requestJWTOturum açmış adrese doğrulama bağlantısı gönder
  • GET/api/account/verification/confirm?token=Herkese açıkOnay sayfasını göster: hiçbir şey yazmaz
  • POST/api/account/verification/confirmHerkese açıkDoğrulamayı tamamla
  • GET/api/auth/googleHerkese açıkGoogle ile girişi başlat
  • GET/api/auth/google/callbackHerkese açıkGoogle giriş dönüşü
  • GET/api/auth/discordHerkese açıkDiscord ile girişi başlat
  • GET/api/auth/discord/callbackHerkese açıkDiscord giriş dönüşü

Tercihler ve uyarılar

E-posta ve bildirim anahtarları ile hesabın uyarı akışı.

  • GET/api/user/email-preferencesJWTPazarlama e-postası aboneliği durumu
  • POST/api/user/email-preferencesJWTDeğiştir
  • GET/api/user/notification-preferencesJWTCanlı oy bildirimi tercihi
  • POST/api/user/notification-preferencesJWTDeğiştir: gerçek bir JSON boolean olmalı
  • GET/api/user/alerts?limit=20JWTHesap uyarıları, en yeniden başlayarak, ?before ile sayfalanır
  • POST/api/user/alerts/readJWTBir uyarıyı okundu işaretle
  • POST/api/user/alerts/dismissJWTBir uyarıyı kapat
  • GET/api/email/unsubscribe?token=Herkese açıkE-postayla gelen tokenla tek tıkla abonelikten çık

Kampanyalar

Kampanya oluşturun, çalışırken yönlendirin ve sonlandırın. Platform API'sinin çekirdeği burasıdır.

  • GET/orders/getAllAPI anahtarıKampanyalarınız, en yeniden başlayarak, siteleriyle birlikte
  • GET/orders/get/{id}API anahtarıTek kampanya
  • POST/orders/checkoutAPI anahtarıKampanya oluştur ve bakiyeden düş
  • POST/orders/updateAPI anahtarıBir kampanyayı düzenle
  • POST/orders/pauseAPI anahtarıÇalışan bir kampanyayı duraklat
  • POST/orders/unpauseAPI anahtarıDuraklatılmış kampanyayı sürdür
  • POST/orders/archiveAPI anahtarıBir kampanyayı arşivle
  • POST/orders/unarchiveAPI anahtarıArşivlenmiş kampanyayı geri getir
  • PATCH/orders/updateLimitAPI anahtarıGünlük oy tavanını ayarla veya kaldır

POST /orders/checkout

Gövde en üst düzeyde bir JSON dizisidir, nesne değil. Her satır bir kampanyadır. Hiçbir tahsilat yapılmadan önce sepetin tamamı doğrulanır ve tahsilat ile eklemeler tek işlemdir: sipariş ya tümüyle olur ya da hiç olmaz.

Sabit adetli satır

Olağan durum: bir adrese belirli sayıda oy teslim etmek.

ParametreTürAçıklama
idzorunluinteger/orders/getAllWebsites çıktısındaki site kimliği.
amountzorunluintegerTeslim edilecek oy. 0 veya daha fazla, en çok 2.147.483.647.
ownNamezorunluurlOy adresi. Siparişin `url` alanı olarak saklanır.
custom_max_per_hourintegerTeslimat tavanı, sitenin kendi üst sınırına kırpılır.
extra_colstringSiparişle taşınan serbest metin alanı.
cURL
curl -X POST "https://backend.toplistbot.com/orders/checkout?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "id": 9,
      "amount": 1000,
      "ownName": "https://arena-top100.com/index.php?a=in&u=yourserver",
      "custom_max_per_hour": 60
    }
  ]'
Response
200 OK
Successfully purchased with token balance

Abonelik satırı

`subscribeable` göstergesi 1 olan siteler için. Fiyat, sitenin subscription_price_1d değerinin gün sayısı ve kademe indirimiyle çarpımıdır: Weekly 0,90, Monthly 0,80, diğer her şey 1,00. Teslim edilecek miktar sunucuda sitenin kendi subscription_speed değerinden türetilir, yani gönderdiğiniz hiçbir şey onu değiştirmez.

Body
[
  {
    "type": "subscription",
    "website": { "id": 9 },
    "subscription_days": 30,
    "tier": { "name": "Monthly" },
    "url": "https://arena-top100.com/index.php?a=in&u=yourserver"
  }
]

Yanıtlar

  • 200Bütün satırlar oluşturuldu ve bakiyeden düşüldü. Gövde düz metindir.
  • 400Gövde geçerli JSON değildi.
  • 402Token yetersiz. Mesaj kaç token gerektiğini söyler ve hiçbir tahsilat yapılmaz.
  • 422Bir veya daha fazla satır hatalı. Hiçbir tahsilat yapılmadı.
  • 429Aynı sepet son 60 saniye içinde gönderildi. Belirtilen süre sonra yeniden deneyin.

422 yanıtı sorunlu satırı adlandırır: hatalar items.[index].[field] biçiminde anahtarlanır, böylece üç hatalı satırı olan bir sepet üç turda değil tek turda düzeltilir.

422 body
{
  "errors": {
    "items.2.amount": ["Enter 0 or more votes; a negative amount is not allowed."]
  }
}

POST /orders/update

`id` zorunludur; yalnızca değiştirdiğiniz alanları gönderin. Abonelik siparişleri değiştirilemez.

ParametreTürAçıklama
idzorunluintegerDüzenlenecek kampanya.
amount_to_dointegerYeni oy toplamı. Artırmak farkı tahsil eder, azaltmak iade eder ve değişiklikler arasında 30 saniye beklenir.
urlurlOy adresi.
custom_namestringKampanya için kendi etiketiniz.
custom_max_per_hourintegerTeslimat tavanı.
username_profile_idintegerBir oy profili bağla.
proxy_profile_idintegerBir proxy profili bağla.
http_referralurlHer oyla gönderilecek yönlendiren.
extra_colstringSerbest metin alanı.
cURL
curl -X POST "https://backend.toplistbot.com/orders/update?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":184223,"amount_to_do":2000,"custom_name":"EU launch"}'

Günlük tavan

`type: "delete"` tavanı kaldırır. Bu durumda da doğrulayıcı `max_votes_per_day` ister: herhangi bir tam sayı gönderin.

cURL
curl -X PATCH "https://backend.toplistbot.com/orders/updateLimit?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":184223,"max_votes_per_day":500,"type":"set"}'

Kayıtlar ve analizler

Oy oy ve toplu teslimat verileri. Ayrı bir kayıt veritabanını okurlar ve API'nin geri kalanından yavaştırlar: saniyede değil, dakikada bir sorgulayın.

  • GET/orders/logs/{id}API anahtarıBir kampanyanın oy oy teslimat kaydı
  • GET/orders/graph/{id}API anahtarıTek kampanya için grafiğe hazır zaman serisi
  • GET/api/orders/graph/summaryJWTTüm kampanyalarınızı kapsayan tek seri
  • GET/orders/grouped/usernames/{id}API anahtarıOy veren kullanıcı adına göre gruplanmış teslimatlar
  • POST/orders/averageAPI anahtarıBirden çok kampanyanın ortalama teslimatı
  • GET/api/logs/{id}/filtered-graphJWTFiltrelenmiş zaman serisi

Oy ve proxy profilleri

Oy profili, bir kampanyanın oy verirken kullandığı adlandırılmış kullanıcı adı listesidir. Proxy profili ise kullanılan IP'ler için ülke izin listesidir. İkisini de /orders/update üzerinden username_profile_id veya proxy_profile_id ile bir kampanyaya bağlayın.

  • GET/advanced/profile/getAPI anahtarıOy profilleriniz
  • GET/advanced/profile/get/{id}API anahtarıTek oy profili
  • POST/advanced/profile/createAPI anahtarıOy profili oluştur veya kimliğe göre üzerine yaz
  • DELETE/advanced/profile/delete/{id}API anahtarıBir oy profilini sil
  • GET/advanced/profile/proxy/getAPI anahtarıProxy profilleriniz
  • GET/advanced/profile/proxy/get/{id}API anahtarıTek proxy profili
  • POST/advanced/profile/proxy/createAPI anahtarıProxy profili oluştur veya kimliğe göre üzerine yaz
  • DELETE/advanced/profile/proxy/delete/{id}API anahtarıBir proxy profilini sil

Discord tokenları

Oy verenleri Discord üzerinden doğrulayan listeler için. Aynı token iki kez eklenirse yinelenmiş sayılıp reddedilir.

  • GET/api/discord-tokensJWTDiscord tokenlarınız
  • POST/api/discord-tokensJWTToken ekle
  • GET/api/discord-tokens/statsJWTTokenlarınızın toplam kullanımı
  • GET/api/discord-tokens/{id}JWTTek token
  • PATCH/api/discord-tokens/{id}JWTBir tokenı veya etkin durumunu değiştir
  • DELETE/api/discord-tokens/{id}JWTBir tokenı kaldır
  • PUT/api/discord-tokens/{id}/toggleJWTBir tokenı etkin ve devre dışı arasında çevir

Faturalama ve ödemeler

Token satın alma her zaman barındırılan bir ödeme sayfasında biter, bu yüzden bakiye yükleme tamamen otomatik olamaz. Yüklemeden sonrası olabilir.

  • GET/invoices/getAPI anahtarıFaturalama geçmişi
  • GET/api/subscriptions/subscriptionsJWTEtkin abonelikler
  • GET/products/tokensByUserAPI anahtarıHesabınıza göre fiyatlanmış token paketleri
  • POST/company/getAPI anahtarıFatura adresiniz
  • POST/company/createAPI anahtarıAdresi ayarla: country, region, city, address, postalCode
  • GET/api/stripe/checkout?product_id=JWTToken paketi için Stripe Checkout adresi
  • GET/api/stripe/subscription?plan=JWTBir plan için Stripe Checkout adresi
  • GET/api/stripe/portalJWTStripe faturalama portalı adresi
  • GET/api/stripe/documentsJWTStripe faturaları ve makbuzları
  • GET/coinpayments/checkoutAPI anahtarıKripto ödeme adresi

Kayıtlı sepet

Panelin sepeti, cihaz değişikliğinde kaybolmasın diye sunucuda saklanır. Sipariş vermek için gerekmez: /orders/checkout sepeti isteğin içinde alır.

  • GET/api/cartJWTKayıtlı sepet
  • PUT/api/cartJWTSepeti değiştir
  • POST/api/cartJWTSepeti değiştir, PUT ile aynı
  • DELETE/api/cartJWTSepeti boşalt

Dahili yüzeyler

Bunlar Stripe, görev zamanlayıcı ve kayıt kötüye kullanım doğrulaması içindir. Paylaşılan sırlar veya imzalarla doğrulanırlar ve entegrasyon yüzeyinin parçası değildirler: envanter eksiksiz olsun diye listelenmişlerdir.

  • POST/api/stripe/webhookStripe ödeme olayları, imzayla doğrulanır
  • POST/api/jobs/tickZamanı gelen görevleri çalıştırır, paylaşılan sırla doğrulanır
  • POST/api/pow/challengeKayıt proof-of-work doğrulaması
  • POST/api/logs/updateE-posta etkinlik takibi
  • POST/api/order/{email}Başka bir hesapta sipariş oluşturur — yalnızca yönetici listesi
  • GET/reset-password/{token}Sunucuda üretilen eski parola sıfırlama sayfası, gönderilmiş bağlantılar için tutuluyor
  • GET/Herkese açıkSağlık kontrolü

Yanıt biçimleri

Okuyacağınız hemen her şey iki nesneyle gelir: katalog uç noktalarının döndürdüğü site ve sipariş uç noktalarının döndürdüğü kampanya. Her birinde kırk civarı sütun var; aşağıdaki tablolar bir entegrasyonun gerçekten ihtiyaç duyduklarıdır.

Üç alan sayı tuttuğu hâlde JSON metni olarak gelir: sitede accept_rate ve timeout, kampanyada custom_max_per_hour. Hesap yapmadan önce sayıya çevirin, yoksa toplama yerine metin birleştirmiş olursunuz.

Types to watch
{
  "accept_rate": "70",          // string, not number
  "timeout": "150000",          // string, not number
  "custom_max_per_hour": "60"   // string, not number
}

Site nesnesi

/orders/getAllWebsites ve /orders/getWebsiteDetailsByName tarafından döndürülür, ayrıca her kampanyanın içine `website` olarak eklenir.

ParametreTürAçıklama
idintegerSite kimliği. Sepet satırında `id`, SMM uç noktasında `service` olarak gönderilir.
namestringGörünen ad ve /orders/getWebsiteDetailsByName ile eşleşen tam metin.
price_per_1000number1.000 kabul edilmiş oy başına token. Maliyet formülünün kullandığı sayı budur.
accept_ratestringGönderilen oyların kabul edilme yüzdesi. Tüm ilerleme ve iade hesapları buna bağlıdır.
max_per_hourintegerSitenin kendi teslimat tavanı. Hem custom_max_per_hour hem de SMM'deki interval buna kırpılır.
activeinteger1 sipariş verilebilir demektir. Pasif siteler de yanıtta döner, süzmek size kalmış.
vote_reset_timeintegerAynı kimliğin yeniden oy verebilmesi için geçmesi gereken saat.
speed_changeableinteger1, sitenin özel teslimat hızını dikkate aldığı anlamına gelir.
referer_must_be_setinteger1, kampanyada http_referral alanının ayarlanması gerektiği anlamına gelir.
optional_data_possibleinteger1, sitenin kampanyanın optional_data alanını kabul ettiği anlamına gelir.
track_votesinteger1, bu sitedeki kampanyalar için oy oy teslimat kayıtlarının bulunduğu anlamına gelir.
subscribeableinteger1, abonelik satırlarının kabul edildiği anlamına gelir.
subscription_price_1dnumberKademe indirimi öncesi, abonelik günü başına token.
subscription_speedintegerBir aboneliğin saatte teslim ettiği oy. Miktar sunucuda bundan türetilir, gönderdiğiniz istekten değil.

Burada geçmeyen alanlar panelin kendi arayüzünü besler. İsterseniz okuyun, ama entegrasyon sözleşmesinin parçası değiller ve haber verilmeden değişebilirler.

Kampanya nesnesi

/orders/getAll ve /orders/get/ tarafından döndürülür. Eksik olana dikkat edin: durum alanı yok.

ParametreTürAçıklama
idintegerKampanya kimliği. Kampanyalar altındaki her uç nokta bunu `id` olarak alır.
vote_website_idintegerKampanyanın çalıştığı site.
websiteobjectGömülü tam site nesnesi. /orders/getAll içinde var, /orders/get/ içinde yok.
urlstringOy adresi: sipariş verirken gönderdiğiniz `ownName`.
custom_namestringKampanya için kendi etiketiniz ya da null.
amount_to_dointegerSatın alınan kabul edilmiş oy. Denemeleri değil, kabul edilenleri sayar.
amount_doneintegerŞu ana kadar gönderilen oy. amount_to_do ile farklı birimde — aşağıdaki ilerleme bölümüne bakın.
runninginteger1 teslim ediyor, 0 duraklatılmış.
doneinteger1 kapandı demektir: iptal edildi, iade edildi ve iki miktar da sıfırlandı. Tamamlanma göstergesi değildir.
archiveinteger1 arşivlenmiş demektir. Arşivlenmiş kampanyalar yine de /orders/getAll ile döner.
custom_max_per_hourstringBu kampanya için teslimat tavanınız, metin olarak.
max_votes_per_dayintegerGünlük oy tavanı ya da tavan yoksa null.
is_subscriptioninteger1 abonelik demektir. Abonelikler satın alındıktan sonra düzenlenemez.
paused_unpauseddatetimeKampanyanın en son ne zaman duraklatıldığı, sürdürüldüğü veya yeniden boyutlandırıldığı. Düzenlemeler arasındaki 30 saniyelik bekleme buradan başlar.

Burada geçmeyen alanlar panelin kendi arayüzünü besler. İsterseniz okuyun, ama entegrasyon sözleşmesinin parçası değiller ve haber verilmeden değişebilirler.

Çalışıyor mu? Bitti mi?

Kampanyanın durum alanı yoktur, bu yüzden durumu dört sütundan çıkarırsınız. Koşulları sırayla değerlendirin ve ilk uyanı alın.

KoşulAnlamı
1done === 1İptal edildi. Harcanmayan kalan iade edildi, iki miktar da sıfırlandı ve kampanya arşivlendi.
2running === 0Sizin tarafınızdan duraklatıldı. /orders/unpause ile sürdürün.
3remaining_accepted === 0Satın alınan her şey teslim edildi.
4running === 1Normal çalışıyor.
5archive === 1Panelde gizli ama /orders/getAll yine de döndürüyor. Panelin gösterdiğiyle aynı listeyi istiyorsanız süzün.

Sıra önemlidir. İptal, done ve archive alanlarını birlikte ayarlar; bu yüzden önce archive'ı kontrol etmek iptal edilmiş bir kampanyayı yalnızca arşivlenmiş gibi gösterir, kalanı running'den önce kontrol etmek de duraklatılmış bir kampanyayı teslim ediyor gibi gösterir.

İlerleme ve iadeler

amount_to_do kabul edilmiş oyları, amount_done ise gönderimleri sayar. Gönderimlerin yalnızca accept_rate yüzdesi kabul edilir, yani ikisi farklı birimdedir ve birini diğerinden doğrudan çıkarmak yanlıştır.

Bu, en sık yapılan entegrasyon hatasıdır ve sessizce başarısız olur: sayılar makul görünmeye devam eder, ilerleme çubuğu ise düpedüz yanlıştır. Yüzde 70 kabul oranında biten bir kampanya yüzde 70 tamamlanmış gibi görünür; yüzde 50'de yarısı teslim edilmiş bir kampanya hiç başlamamış gibi görünür. Her seferinde önce gönderimleri kabul edilmiş oya çevirin.

JavaScript
// accept_rate arrives as a STRING, and it is per-site, not global.
const rate = Number(order.website.accept_rate)

// amount_done counts SUBMISSIONS; amount_to_do counts ACCEPTED votes.
// Convert before comparing them.
const delivered = order.amount_done * rate / 100
const remaining = Math.max(order.amount_to_do - delivered, 0)
const percent   = 100 * delivered / order.amount_to_do

// What cancelling right now would put back on your balance:
const refund    = (remaining / 1000) * order.website.price_per_1000

Aynı hesap bir iptalin bedelini de verir: iade, sitenin liste fiyatı üzerinden harcanmayan kalandır, yani bir kampanyayı durdurmanın ne kazandıracağını karar vermeden önce görebilirsiniz.

Baştan sona bir kampanya

Altı çağrı, tek API anahtarı, tarayıcı yok, giriş yok. Aynı işi SMM uç noktasıyla yapmak üç çağrıdır — services, add, status — ve platform API'sine hiç dokunmaz.

bash
KEY=YOUR_API_KEY
BASE=https://backend.toplistbot.com

# 1. What can I order, and what does it cost?
curl -s "$BASE/orders/getAllWebsites" \
  | jq '.[] | {id, name, price_per_1000, max_per_hour}'

# 2. What can I afford?
curl -s -X POST "$BASE/api/v2" -d "key=$KEY" -d "action=balance"

# 3. Launch it.  cost = price_per_1000 * amount / 1000
curl -s -X POST "$BASE/orders/checkout?key=$KEY" \
  -H "Content-Type: application/json" \
  -d '[{"id":9,"amount":1000,
        "ownName":"https://arena-top100.com/index.php?a=in&u=me",
        "custom_max_per_hour":60}]'

# 4. Find the campaign that was just created.
curl -s "$BASE/orders/getAll?key=$KEY" | jq '.[0] | {id, url, amount_to_do, amount_done}'

# 5. Watch it. Poll every few minutes.
curl -s "$BASE/orders/graph/184223?key=$KEY"

# 6. Slow it down, or stop it.
curl -s -X PATCH "$BASE/orders/updateLimit?key=$KEY" \
  -H "Content-Type: application/json" -d '{"id":184223,"max_votes_per_day":200,"type":"set"}'
curl -s -X POST "$BASE/orders/pause?key=$KEY" \
  -H "Content-Type: application/json" -d '{"id":184223}'

Hatalar

Hatalar eşleşen bir HTTP durumuyla döner. Doğrulama hataları, alan adına göre anahtarlanan bir `errors` nesnesi döndürür.

  • 400İstek hiç okunamadı: bozuk JSON ya da SMM uç noktasının tanımadığı bir eylem.
  • 401Kimlik bilgisi eksik, süresi dolmuş veya yanlış.
  • 402Token yetersiz. Hiçbir tahsilat yapılmadı.
  • 403Kimlik doğrulandı ama bu işleme izin yok.
  • 404Böyle bir kayıt yok; başkasına ait olanlar da buna dahildir.
  • 409Hesabın mevcut durumuyla çelişiyor, örneğin iki adımlı doğrulamayı iki kez açmak.
  • 422Doğrulama başarısız. Gövde her alanı adıyla belirtir.
  • 429İstek limiti. Mesaj ne kadar bekleneceğini söyler.
  • 500Bizim hatamız. Hiçbir tahsilat yapılmadı.
  • 503Bir bağımlılık kullanılamıyor. Sonra tekrar deneyin.
Validation error
{
  "errors": {
    "quantity": ["The quantity must be at least 1."]
  }
}

İstek gövdesi bir diziyse hata anahtarları başarısız olan satırın sırasını taşır.

Birkaç uç nokta JSON yerine düz metin döner: /orders/checkout, /orders/pause ve /orders/updateLimit bunlardan. Gövdenin biçimine göre değil, durum koduna göre dallanın.

İstek limitleri

429 her zaman ne kadar bekleneceğini söyler. Körlemesine yeniden denemek yerine buna uyun.

  • Aynı sepet en fazla 60 saniyede bir kabul edilir.
  • Bir kampanyanın oy toplamı 30 saniyede bir değiştirilebilir.
  • Giriş denemeleri adres ve IP başına sınırlandırılır.
  • Parola sıfırlama: 15 dakikada adres başına 3, IP başına 10.
  • `status` ve `cancel` çağrı başına en fazla 100 sipariş kimliği alır.
  • İlerlemeyi saniyede değil dakikada bir sorgulayın. Teslimat saatte oy olarak ölçülür.

Sınırlar ve notlar

  • Sipariş miktarı 1 ile 50000 işlem arasında olmalıdır.
  • Aralık varsayılan olarak saatte 15'tir ve 4000 ile sınırlıdır. Bir sitenin kendi azami değerinden fazlası istenirse, sınırı belirten 400 hatasıyla reddedilir.
  • `refill` ve `refill_status` eylemleri uygulanmamıştır — bunun yerine yeni bir sipariş oluşturun.
  • `status` alanı her zaman düz "Completed" değerindedir ve bir ilerleme göstergesi değildir. Siparişin bittiğini anlamak için `remains == 0`, teslim edileni görmek için `start_count` kullanın.
  • Abonelikler satın alındıktan sonra düzenlenemez: duraklatın veya iptal edin.
  • Liste siteleri kendi kurallarını belirler ve bunları zaman içinde değiştirir. Tanıtım yaptığınız her sitenin koşullarına uymaktan siz sorumlusunuz. Herhangi bir sıralama veya yerleşim vaat etmiyoruz.
Ücretsiz başlayın

Hemen Tanıtmaya Başlayın!

E-postanızı doğrulayın ve hizmetimizi denemek için 100 ücretsiz token kazanın. Hiçbir şart yok.

Kredi kartı yok
İstediğiniz zaman iptal
7/24 destek