SMS API Dokümantasyonu
toplusms.fun REST API ile kendi uygulamanızdan, web sitenizden veya otomasyonlarınızdan SMS gönderin; bakiyenizi ve kampanya sonuçlarınızı sorgulayın.
Giriş
Tüm istekler HTTPS üzerinden yapılır; istek ve yanıtlar JSON (UTF-8) biçimindedir.
https://toplusms.fun/api/v1/Content-Type: application/jsonv1Kimlik doğrulama
Her istekte API anahtarınızı Authorization başlığında gönderin. Anahtarı panelde API sayfasından oluşturursunuz; yalnızca oluşturduğunuzda bir kez gösterilir.
Authorization: Bearer tsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Alternatif olarak X-API-Key: <anahtar> başlığını da kullanabilirsiniz. Anahtarı URL içinde göndermeyin.
Hız sınırı
Her anahtar için dakikada en fazla 60 istek gönderebilirsiniz. Aşarsanız 429 ve Retry-After başlığı döner. Tek istekte en fazla 500 alıcıya gönderim yapılır; daha fazlası için isteği bölün.
POST SMS gönder
https://toplusms.fun/api/v1/send.php
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
to | metin veya dizi | Evet | Alıcı numaraları. Dizi ya da virgül/boşlukla ayrılmış metin. Biçimler: 905XXXXXXXXX, 05XXXXXXXXX, +905XXXXXXXXX. |
message | metin | Evet | Mesaj metni, en fazla 1000 karakter. |
title | metin | Hayır | Panelde görünecek kampanya adı (en fazla 100 karakter). |
sender | metin | Hayır | Gönderici başlığı (3-11 harf/rakam). Yalnızca hesabınızda özel başlığa izin verilmişse kullanılır; aksi halde varsayılan başlık kullanılır. |
curl -X POST "https://toplusms.fun/api/v1/send.php" \
-H "Authorization: Bearer tsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"to":["905301112233","905304445566"],"message":"Merhaba, siparişiniz yola çıktı!","title":"Kargo bildirimi"}'<?php
$ch = curl_init('https://toplusms.fun/api/v1/send.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer tsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'to' => ['905301112233', '905304445566'],
'message' => 'Merhaba, siparişiniz yola çıktı!',
]),
]);
$yanit = json_decode(curl_exec($ch), true);
print_r($yanit);import requests
r = requests.post(
"https://toplusms.fun/api/v1/send.php",
headers={"Authorization": "Bearer tsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},
json={"to": ["905301112233", "905304445566"],
"message": "Merhaba, siparişiniz yola çıktı!"},
timeout=60,
)
print(r.status_code, r.json())const res = await fetch("https://toplusms.fun/api/v1/send.php", {
method: "POST",
headers: {
"Authorization": "Bearer tsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
to: ["905301112233", "905304445566"],
message: "Merhaba, siparişiniz yola çıktı!",
}),
});
console.log(res.status, await res.json());Başarılı yanıt (200):
{
"status": "success",
"campaign_id": 1042,
"total": 2,
"sent": 2,
"failed": 0,
"segments": 1,
"cost": 2,
"balance": 98,
"invalid": [],
"results": [
{ "to": "905301112233", "status": "sent", "message": "İletildi" },
{ "to": "905304445566", "status": "sent", "message": "İletildi" }
]
}
status değeri: success (hepsi iletildi), partial (bir kısmı iletildi), failed (hiçbiri iletilmedi). İletilemeyen mesajların kredisi otomatik iade edilir. Geçersiz numaralar invalid dizisinde döner ve ücretlendirilmez.
GET Bakiye
https://toplusms.fun/api/v1/balance.php
curl "https://toplusms.fun/api/v1/balance.php" -H "Authorization: Bearer tsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
{ "status": "success", "username": "firmam", "credits": 4820 }
GET Kampanya listesi
https://toplusms.fun/api/v1/campaigns.php?limit=20&page=1 · limit en fazla 50.
{
"status": "success", "page": 1, "limit": 20, "total": 37,
"campaigns": [
{ "id": 1042, "title": "Kargo bildirimi", "sender": "TOPLUSMS",
"total": 2, "sent": 2, "failed": 0, "cost": 2, "created_at": "2026-10-22 14:05:11" }
]
}
GET Kampanya detayı
https://toplusms.fun/api/v1/campaign.php?id=1042
{
"status": "success",
"campaign": { "id": 1042, "title": "Kargo bildirimi", "message": "Merhaba…", "segments": 1,
"total": 2, "sent": 2, "failed": 0, "cost": 2, "created_at": "2026-10-22 14:05:11" },
"results": [ { "to": "905301112233", "status": "sent", "message": "İletildi" } ]
}
Kredi hesabı
Harcanan kredi = mesaj parça sayısı × alıcı sayısı. Türkçe karakter (ç, ğ, ı, ö, ş, ü) içermeyen mesajda bir parça 160, Türkçe karakter içerenlerde 70 karakterdir. Uzun mesajlar parçalanır (153 / 67 karakter). İletilemeyen alıcıların kredisi iade edilir. Krediyi Paket Satın Al sayfasından yükleyebilirsiniz.
Hata kodları
Hatalarda HTTP durum kodu ve şu biçimde bir JSON döner:
{ "status": "error", "code": "insufficient_credits", "message": "Yetersiz kredi.", "required": 12, "balance": 5 }
| HTTP | code | Anlamı |
|---|---|---|
| 400 | invalid_json | İstek gövdesi geçerli JSON değil. |
| 401 | missing_api_key · invalid_api_key | Anahtar gönderilmedi ya da geçersiz/iptal edilmiş. |
| 402 | insufficient_credits | Krediniz yetersiz. required ve balance alanları döner. |
| 403 | account_suspended · ip_not_allowed | Hesap askıda ya da istek izinli IP listesi dışından geldi. |
| 404 | not_found | Kampanya bulunamadı. |
| 405 | method_not_allowed | Yanlış HTTP yöntemi (Allow başlığına bakın). |
| 422 | invalid_message · message_too_long · invalid_recipients · too_many_recipients · invalid_id | Gönderilen alanlar geçersiz. |
| 429 | rate_limited · too_many_attempts | Hız sınırı aşıldı; Retry-After saniye sonra tekrar deneyin. |
| 500 | server_error | Beklenmeyen hata. Kısa süre sonra tekrar deneyin. |
İpuçları
- Anahtarı gizli tutun. Tarayıcıdaki (istemci) koda koymayın; yalnızca sunucunuzdan kullanın. Sızarsa panelden hemen iptal edin.
- IP kısıtlaması ekleyin: anahtarı yalnızca sunucunuzun IP adresine izinli yapın.
- Zaman aşımında tekrar göndermeyin. İstek yanıtlanmadan koparsa aynı mesajı yeniden göndermek çift SMS'e yol açabilir; önce
campaigns.phpile kontrol edin. - Uzun gönderimlerde istek süresi uzayabilir; istemcinizde en az 60 saniye zaman aşımı kullanın.