Bu sayfada
- Genel bakış
- Başlangıç
- Bir ajanla otomatikleştir
- Kimlik doğrulama
- Jetonlar ve fiyatlandırma
- SMM panel API'si
- services
- add
- status
- balance
- cancel
- Platform API'si
- Katalog
- Hesap
- İki adımlı doğrulama ve giriş
- Tercihler ve uyarılar
- Kampanyalar
- Sipariş oluşturma
- Sipariş düzenleme
- Kayıtlar ve analizler
- Oy ve proxy profilleri
- Discord tokenları
- Faturalama ve ödemeler
- Kayıtlı sepet
- Dahili yüzeyler
- Yanıt biçimleri
- Site nesnesi
- Kampanya nesnesi
- Kampanya durumu
- İlerleme ve iadeler
- Uçtan uca örnek
- Hatalar
- İstek limitleri
- Sınırlar ve notlar
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.
SMM panel API'si
Perfect Panel uyumlu tek bir uç nokta. Paneliniz zaten standart SMM protokolünü konuşuyorsa buraya yönlendirin, kod değişikliği gerekmez.
Platform API'si
Panelin arkasındaki REST API: katalogda gezinme, kampanya oluşturma ve yönetme, oy oy teslimat kayıtlarını okuma, profil, proxy ve fatura yönetimi.
Temel URL
https://backend.toplistbot.com/api
https://backend.toplistbot.comAş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.
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.
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.
İ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.
cURLcurl -X POST https://backend.toplistbot.com/api/v2 -d "key=YOUR_API_KEY" -d "action=services"İ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.
cURLcurl -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"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.
cURLcurl -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.txtBaş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.
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.
| Yol | Kimlik bilgisi | Şunun için |
|---|---|---|
| /api/orders/getAll | JWT | Bir insanın giriş yaptığı her şey |
| /orders/getAll | API 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.
# 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"curl https://backend.toplistbot.com/api/v2?key=YOUR_API_KEYJWT
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.
curl -X POST https://backend.toplistbot.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"..."}'{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer",
"expires_in": 3600,
"user": { "id": 4211, "email": "[email protected]", "tokens": 528.41, "...": "..." }
}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.
// 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_in_tokens = (rate * quantity) / 1000Oranı 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.
https://backend.toplistbot.com/api/v2| Eylem | Parametreler |
|---|---|
services | — |
add | service, link, quantity, interval? |
status | orders |
balance | — |
cancel | orders |
`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 -X POST https://backend.toplistbot.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services"[
{
"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.
| Parametre | Tür | Açıklama |
|---|---|---|
keyzorunlu | string | API anahtarınız. |
actionzorunlu | string | `add` olmalıdır. |
servicezorunlu | integer | services eyleminden gelen hizmet kimliği. |
linkzorunlu | url | Kampanyanın çalışacağı URL. Geçerli bir URL olmalıdır. |
quantityzorunlu | integer | Yürütülecek işlem sayısı, 1 ile 50000 arasında. |
interval | integer | Saat başına işlem. Varsayılan 15, üst sınır 4000 ve sitenin kendi azami değerini aşamaz. |
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"{
"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 -X POST https://backend.toplistbot.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=status" \
-d "orders=184223"{
"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.
{
"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 -X POST https://backend.toplistbot.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=balance"{
"balance": 528.41,
"currency": "USD"
}action=cancel
Bir siparişi durdurur ve harcanmayan kalanı bakiyenize iade eder. Tamamlanmış siparişler iptal edilemez.
curl -X POST https://backend.toplistbot.com/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=cancel" \
-d "orders=184223,184224"[
{ "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 "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.
# 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.
| Parametre | Tür | Açıklama |
|---|---|---|
idzorunlu | integer | /orders/getAllWebsites çıktısındaki site kimliği. |
amountzorunlu | integer | Teslim edilecek oy. 0 veya daha fazla, en çok 2.147.483.647. |
ownNamezorunlu | url | Oy adresi. Siparişin `url` alanı olarak saklanır. |
custom_max_per_hour | integer | Teslimat tavanı, sitenin kendi üst sınırına kırpılır. |
extra_col | string | Siparişle taşınan serbest metin alanı. |
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
}
]'200 OK
Successfully purchased with token balanceAbonelik 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.
[
{
"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.
{
"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.
| Parametre | Tür | Açıklama |
|---|---|---|
idzorunlu | integer | Düzenlenecek kampanya. |
amount_to_do | integer | Yeni oy toplamı. Artırmak farkı tahsil eder, azaltmak iade eder ve değişiklikler arasında 30 saniye beklenir. |
url | url | Oy adresi. |
custom_name | string | Kampanya için kendi etiketiniz. |
custom_max_per_hour | integer | Teslimat tavanı. |
username_profile_id | integer | Bir oy profili bağla. |
proxy_profile_id | integer | Bir proxy profili bağla. |
http_referral | url | Her oyla gönderilecek yönlendiren. |
extra_col | string | Serbest metin alanı. |
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 -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.
{
"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.
| Parametre | Tür | Açıklama |
|---|---|---|
id | integer | Site kimliği. Sepet satırında `id`, SMM uç noktasında `service` olarak gönderilir. |
name | string | Görünen ad ve /orders/getWebsiteDetailsByName ile eşleşen tam metin. |
price_per_1000 | number | 1.000 kabul edilmiş oy başına token. Maliyet formülünün kullandığı sayı budur. |
accept_rate | string | Gönderilen oyların kabul edilme yüzdesi. Tüm ilerleme ve iade hesapları buna bağlıdır. |
max_per_hour | integer | Sitenin kendi teslimat tavanı. Hem custom_max_per_hour hem de SMM'deki interval buna kırpılır. |
active | integer | 1 sipariş verilebilir demektir. Pasif siteler de yanıtta döner, süzmek size kalmış. |
vote_reset_time | integer | Aynı kimliğin yeniden oy verebilmesi için geçmesi gereken saat. |
speed_changeable | integer | 1, sitenin özel teslimat hızını dikkate aldığı anlamına gelir. |
referer_must_be_set | integer | 1, kampanyada http_referral alanının ayarlanması gerektiği anlamına gelir. |
optional_data_possible | integer | 1, sitenin kampanyanın optional_data alanını kabul ettiği anlamına gelir. |
track_votes | integer | 1, bu sitedeki kampanyalar için oy oy teslimat kayıtlarının bulunduğu anlamına gelir. |
subscribeable | integer | 1, abonelik satırlarının kabul edildiği anlamına gelir. |
subscription_price_1d | number | Kademe indirimi öncesi, abonelik günü başına token. |
subscription_speed | integer | Bir 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.
| Parametre | Tür | Açıklama |
|---|---|---|
id | integer | Kampanya kimliği. Kampanyalar altındaki her uç nokta bunu `id` olarak alır. |
vote_website_id | integer | Kampanyanın çalıştığı site. |
website | object | Gömülü tam site nesnesi. /orders/getAll içinde var, /orders/get/ içinde yok. |
url | string | Oy adresi: sipariş verirken gönderdiğiniz `ownName`. |
custom_name | string | Kampanya için kendi etiketiniz ya da null. |
amount_to_do | integer | Satın alınan kabul edilmiş oy. Denemeleri değil, kabul edilenleri sayar. |
amount_done | integer | Şu ana kadar gönderilen oy. amount_to_do ile farklı birimde — aşağıdaki ilerleme bölümüne bakın. |
running | integer | 1 teslim ediyor, 0 duraklatılmış. |
done | integer | 1 kapandı demektir: iptal edildi, iade edildi ve iki miktar da sıfırlandı. Tamamlanma göstergesi değildir. |
archive | integer | 1 arşivlenmiş demektir. Arşivlenmiş kampanyalar yine de /orders/getAll ile döner. |
custom_max_per_hour | string | Bu kampanya için teslimat tavanınız, metin olarak. |
max_votes_per_day | integer | Günlük oy tavanı ya da tavan yoksa null. |
is_subscription | integer | 1 abonelik demektir. Abonelikler satın alındıktan sonra düzenlenemez. |
paused_unpaused | datetime | Kampanyanı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şul | Anlamı |
|---|---|
1done === 1 | İptal edildi. Harcanmayan kalan iade edildi, iki miktar da sıfırlandı ve kampanya arşivlendi. |
2running === 0 | Sizin tarafınızdan duraklatıldı. /orders/unpause ile sürdürün. |
3remaining_accepted === 0 | Satın alınan her şey teslim edildi. |
4running === 1 | Normal çalışıyor. |
5archive === 1 | Panelde 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.
// 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_1000Aynı 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.
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.
{
"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.
