Ana içeriğe geç
Version: 3.0

SMS API v3 Sandbox

SMS API v3'ü canlı ortama geçmeden, gerçek SMS göndermeden ve ücret ödemeden denemeniz için hazırlanmış test ortamıdır.

Sandbox, canlı API ile aynı istekleri kabul eder ve aynı biçimde yanıt verir: alan adları, doğrulama kuralları, hata kodları ve hata mesajları canlıdakiyle aynıdır. Fark, yanıtların arkasındaki verinin sabit (örnek) veri olmasıdır.

Sandbox hiçbir koşulda SMS göndermez. Gönderim uç noktaları isteği doğrular ve gerçekçi bir yanıt döner; mesaj hiçbir operatöre iletilmez, hiçbir yere kaydedilmez ve ücretlendirilmez.


Hızlı başlangıç​

Adres
Token (Authorization API)https://ext-sandbox.netgsm.com.tr/auth/v3/token
SMS API v3https://ext-sandbox.netgsm.com.tr/sms/v3

1. Token alın:

curl -s https://ext-sandbox.netgsm.com.tr/auth/v3/token \
-H 'Content-Type: application/json' \
-d '{"username":"8500000000","password":"password001","scope":"sms"}'

2. Token ile ilk SMS'inizi "gönderin":

curl -s https://ext-sandbox.netgsm.com.tr/sms/v3/send \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-d '{"sender":"TESTHEADER","messages":[{"text":"Merhaba","recipient":"905551112233"}]}'
{
"jobId": "17937053582689000017972015",
"status": "QUEUED",
"accepted": 1,
"rejected": 0,
"rejectedItems": [],
"rejectedItemsTruncated": false,
"referenceId": null
}

Token alma​

SMS API v3'e yapılan her istek bir Bearer token taşır. Sandbox token'ları, Authorization API'nin sandbox'ından alınır.

İstek​

POST https://ext-sandbox.netgsm.com.tr/auth/v3/token
Content-Type: application/json
{
"username": "8500000000",
"password": "password001",
"scope": "sms"
}
AlanAçıklama
usernameDemo hesabın kullanıcı adı (aşağıdaki tabloya bakın)
passwordDemo hesabın şifresi
scopeSMS API için sms. Hesabın kendisini sorgulamak için profile

Yanıt​

{
"access_token": "eyJhbGciOiJIUzI1NiJ9...",
"token_type": "Bearer",
"expires_in": 86400,
"refresh_token": "4d5b2e0d-09fa-4cbe-b3f9-d325290a612e",
"scope": "sms",
"user_id": 900001,
"sub_user_id": 0
}
  • access_token her SMS isteğinde Authorization: Bearer <access_token> başlığıyla gönderilir.
  • Token 24 saat (expires_in: 86400 saniye) geçerlidir. Süresi dolan token ile yapılan istek 401 döner; yeni bir token alın.

Token alınamayan durumlar​

Bazı demo hesaplar, hata senaryolarını göstermek için sms kapsamında token alamaz. Authorization API bu durumda 403 döner:

Hesapscope: "sms" ile yanıt
8500000001403 service_not_activated: hesapta hizmet aktif değil
8500000003403 sub_user_not_permitted: alt kullanıcının hizmete yetkisi yok

Bu iki hesabın SMS API'deki davranışını görmek isterseniz scope: "profile" ile token alabilirsiniz; SMS API bu token'ı kabul eder ve hesaba göre 403 döner (bkz. Demo hesaplar).


Demo hesaplar​

Kullanıcı adıŞifreuser_idRolüSMS API'deki davranış
8500000000password001900001Tüm hizmetler aktifBütün uç noktalarda başarılı yanıt. Denemeleriniz için bu hesabı kullanın.
8500000001password002900002Hizmet aktivasyonu yokGönderim ve gelen kutusu (/send, /send/template, /send/otp, /directory/send, /inbox): 403 account is not activated for this operation. Diğer uç noktalar başarılı.
8500000003password004900004Menü yetkisi olmayan alt kullanıcı/length, /blacklist ve /balance dışında bütün uç noktalarda 403 sub user may not use the sms api.
8500000002password003900003IP izni yokToken alınamaz (Authorization API hatası).
8500000004password005900005API erişimi kapalıToken alınamaz (Authorization API hatası).
8500000005password006900006Hesap pasifToken alınamaz (Authorization API hatası).

Ortak kurallar​

İstek başlıkları​

BaşlıkDeğer
AuthorizationBearer <access_token>, her istekte zorunlu
Content-TypeGövdeli isteklerde application/json

Gövde sıkıştırılmadan gönderilmelidir; Content-Encoding (ör. gzip) içeren istek 415 döner.

Tarih ve saat​

Tarihler ISO-8601 biçiminde, saat dilimi farkıyla yazılır: 2026-11-03T14:30:00+03:00. Sorgu parametresinde + işareti %2B olarak kodlanmalıdır: startAt=2026-11-01T00:00:00%2B03:00.

Yanıtlardaki tarihler Türkiye saatiyle (+03:00) döner.

Numara biçimi​

  • SMS gönderiminde alıcı (/send, /send/template): yurt içi numara 90 + 10 hane (905551112233); yurt dışı numara - + 9-17 hane. +90…, 0… ya da 5… biçimleri kabul edilmez.
  • OTP alıcısı (/send/otp): 5XXXXXXXXX, 05XXXXXXXXX ya da 905XXXXXXXXX; başına + eklenebilir (+905XXXXXXXXX).

Hata biçimi​

Her hata aynı gövdeyle döner:

{
"code": "INVALID_REQUEST",
"message": "2 field(s) rejected",
"requestId": "37619d5202a44485ba3b2531d7832a89",
"timestamp": "2026-11-03T14:29:20.336008+03:00",
"violations": [
{ "field": "sender", "message": "must not be blank" },
{ "field": "messages", "message": "must not be empty" }
]
}
AlanAçıklama
codeMakinenin okuyacağı hata kodu (aşağıdaki tablo)
messageİnsanın okuyacağı açıklama
requestIdİsteğin kimliği. Destek talebinde bunu iletin
timestampHatanın zamanı
violationsAlan doğrulama hatalarında hangi alanın neden reddedildiği. Diğer hatalarda null
rejectedItems, rejectedItemsTruncatedYalnızca NO_DELIVERABLE_MESSAGES hatasında bulunur

Hata kodları​

HTTPcodeNe zaman
400INVALID_REQUESTGövde ya da parametre hatalı, JSON okunamadı
401UNAUTHENTICATEDToken yok (no bearer token) ya da geçersiz / süresi dolmuş (invalid or expired token)
403FORBIDDENHesabın bu işleme yetkisi yok
404NOT_FOUNDBöyle bir uç nokta yok (no such endpoint)
405INVALID_REQUESTYöntem bu uç noktada desteklenmiyor. Desteklenenler Allow başlığında
406—Accept başlığı JSON'u kabul etmiyor (gövdesiz)
413INVALID_REQUESTGövde boyut sınırını aşıyor
415INVALID_REQUESTContent-Type JSON değil ya da gövde sıkıştırılmış
422REJECTED_HEADERGönderici başlığı kullanılamıyor (mesajda nedeni yazar)
422NO_DELIVERABLE_MESSAGESİstekteki mesajların hiçbiri gönderilebilir değil
503SERVICE_UNAVAILABLEKimlik doğrulama servisine o an ulaşılamadı; yeniden deneyin
500INTERNAL_ERRORBeklenmeyen hata; requestId ile bildirin

Sandbox'taki sabit veriler​

Canlı ortamda hesabınıza ait olan veriler, sandbox'ta herkes için aynıdır:

VeriSandbox'taki değer
Gönderici başlıklarıTESTHEADER (alfanümerik, kullanılabilir, varsayılan) ve 8500000000 (abone numarası, kullanılamaz: SUBSCRIBER_NUMBER_RESTRICTED)
ŞablonlarTek şablon: templateId 1, içerik Merhaba ${name}, kodunuz ${code}
Kara liste5000000001, 5000000002
Rapor satırıHer jobId için: numara 5000000000, DELIVERED, NETGSM, 1 parça, teslim 2026-01-01T12:00:00+03:00
Gelen kutusuTek mesaj: gönderen 5000000000, metin Sandbox inbound message
Bakiye1500 Adet SMS (iki kayıt), 300 Adet OTP Sms, 600 Dakika (ses), 50 Adet Fax, 100 Whatsapp Authentication, kredi 125,50 TL. Hesap faturasızdır

5000000000, 5000000001 ve 5000000002 gerçek bir aboneye ait olamayacak örnek numaralardır.


Uç noktalar​

Bütün yollar https://ext-sandbox.netgsm.com.tr/sms/v3 ile başlar.

YöntemYolİşlev
POST/sendSMS gönder
POST/send/templateŞablondan SMS gönder
POST/send/otpOTP gönder
POST/directory/sendRehberdeki gruplara / kişilere gönder
POST/lengthMetnin SMS uzunluğunu hesapla
POST/cancelGönderimi iptal et
GET/reportTeslim raporu
GET/statsGönderim özeti
GET/inboxGelen SMS'ler
GET/sendersGönderici başlıkları
GET/senders/defaultVarsayılan başlık
PUT/senders/defaultVarsayılan başlığı değiştir
GET/templatesŞablonlar
GET/blacklistKara liste
GET/balanceKalan paketler ve kredi

Her uç noktanın ayrıntısı kenar çubuğundaki sayfasındadır.


Canlı ortamdan farklar​

Sandbox'ta istek doğrulaması ve hata yanıtları canlıyla aynıdır. Şu konularda canlıdan farklı davranır:

Gönderim

  • SMS gönderilmez, kaydedilmez, ücretlendirilmez. jobId gerçek bir gönderime karşılık gelmez.
  • İYS (izin) kontrolü yapılmaz; iysFilter kabul edilir ama etkisi yoktur.
  • Gönderim penceresi (startAt / stopAt) denetlenmez. startAt gelecekteyse status SCHEDULED döner.
  • Bakiye denetlenmez; OTP'de 422 INSUFFICIENT_CREDIT dönmez.
  • /directory/send grup numaralarını rehberde aramaz; her grup numarası kabul edilir.

Okuma uç noktaları

  • /report, /stats, /inbox sabit veri döner. Tarih aralığı doğrulanır ama veriyi süzmez: hangi aralığı sorarsanız sorun aynı kayıtlar döner.
  • Bilinmeyen bir jobId için canlıdaki 404 job not found (/stats) ve 404 job not found for this account, or no longer waiting to be sent (/cancel) dönmez; her jobId başarılı yanıt alır.
  • PUT /senders/default kaydedilmez.
  • /balance her hesap için aynı sabit bakiyeyi döner ve gönderimlerle azalmaz; canlıdaki 10 saniyelik önbellek yoktur. Faturalı hesap özeti (stip=2 → "0") sandbox'ta görülmez.
  • Yalnızca templateId: 1 vardır; başka numaralar 400 templates not found döner.

Sınırlar

  • İstek sınırları (rate limit) uygulanmaz; 429 dönmez.

Yanıt süresi

  • Her istekte token, Authorization API'nin sandbox'ında doğrulanır; yanıtlar canlıdan biraz yavaş olabilir.

Sunucu adresleri​

OrtamAdres
Sandboxhttps://ext-sandbox.netgsm.com.tr/sms/v3

Authentication​

Bearer erişim token'ı. Herhangi bir gövde okunmadan önce kontrol edilir.

Security Scheme Type:

http

HTTP Authorization Scheme:

bearer