Geliştiriciler

API referansı

Göndermek için bir uç nokta, durumu okumak için bir uç nokta, makbuzlar için HMAC imzalı web kancaları. Anahtarlar, hesap var olduğu anda verilir — onaylanacak hiçbir şey ve e-posta gönderilecek hiç kimse yoktur.

v1https://api.worldsms.io/v1

Başlarken

Yeni bir hesap ile iletilen bir mesaj arasında üç şey vardır: bir belirteç, biraz bakiye ve bir anahtar. Hiçbiri bir insan içermez.

  1. Hesap oluşturun — belirteci tarayıcınız üretir ve hesap bu belirtecin kendisidir.
  2. Fonlayın. $40 minimum, ödemeler sayfası üzerindeki kripto paralardan herhangi biriyle.
  3. Panelde bir API anahtarı oluşturun. Yalnızca bir kez gösterilir; tıpkı belirteçte olduğu gibi yalnızca karmasını (hash) saklarız.

Bakiyesi boş bir anahtar gönderim yapamaz

Anahtar oluşturma, kasıtlı olarak yüklü bir hesabın arkasına kilitlenmiştir. Kullanılmayan bir kimlik bilgisi ortada durmak, hiçbir yararı olmayan bir yükümlülüktür, bu yüzden panel harcanacak bir şey olana kadar bir tane oluşturmaz.

Kimlik doğrulama

Her istekte taşıyıcı (bearer) belirteç. Anahtar hesabı tanımlar; ikinci bir doğrulama faktörü yoktur, istek üzerinde imza yoktur ve IP izin listesi yoktur — anahtar kimlik bilgisinin tamamıdır, bu yüzden ona öyle davranın.

Authorization
Authorization: Bearer ws_live_9f2c…
AktarımYalnızca HTTPS. Düz HTTP üzerinden yapılan bir istek yönlendirilmez, reddedilir — bir yönlendirme anahtarı zaten sızdırmış olurdu.
KapsamBir anahtar, bir hesabın bakiyesini harcar. Gönderim yapan her sistem için ayrı bir anahtar oluşturun, böylece bir sızıntı dar kapsamda iptal edilir.
İptalAnında. İptal edilen bir anahtar bir sonraki istekte 401 döndürür; halihazırda kabul edilmiş, işlem sürecindeki toplu gönderimler tamamlanmaya devam eder.
KurtarmaHiçbiri. Biz bir hash saklarız. Kaybedilen bir anahtar değiştirilir, asla kurtarılmaz.

Mesaj gönderin

POST/v1/messages

Tek çağrı, bir veya birçok alıcı, karışık hedefler. Her alıcı kendi hedefinin oranına göre fiyatlandırılır ve segment başına faturalandırılır. Çağrı bir bütün olarak kabul edilir veya reddedilir; sizi hiçbir zaman kısmen ücretlendirmez.

İstek gövdesi

AlanTürNotlar
tostring[]Zorunlu. E.164, çağrı başına 5.000'e kadar. Fiyatlandırılmış bir hedefe karşılık gelmeyen numaralar, faturalandırmadan önce reddedilir.
textstringZorunlu. UTF-8. Segment sayısı GSM 03.38'i izler — bkz. segmentler.
fromstringEn fazla 11 karakterlik alfanümerik gönderici adı. Rotanın izin verdiği yerlerde taşınır; bkz. gönderici adları.
varsobject[]İsteğe bağlı birleştirme değerleri, alıcı başına bir nesne, segmentler sayılmadan önce {{name}} yer tutucularına yerleştirilir.
callback_urlstringHesap webhook'unun toplu iş başına isteğe bağlı geçersiz kılınması.
referencestringİsteğe bağlı. Kendi kayıtlarınızla eşleştirebilmeniz için her bildirimde geri yansıtılır.

Örnek

send.sh
# one call, many recipients, mixed destinations
curl -X POST https://api.worldsms.io/v1/messages \
  -H "Authorization: Bearer $WORLDSMS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "ACME",
    "to":   ["+447700900123", "+33612345678"],
    "text": "Your code is 480913"
  }'
202 Accepted
{
  "batch_id": "b_7Kq2xR9wLm",
  "accepted": 2,
  "rejected": 0,
  "segments": 1,
  "cost_usd": 0.0353
}

Birleşik Krallık hedefine 0,0137 $, Fransa hedefine 0,0216 $ — fiyat listesi hedef başına uygulanır, ortalama bir birleşik oran değil.

Toplu işleme

Bir toplu gönderim hemen kabul edilir ve hesap başına dakikada 200 mesaj hızında akar, yani 50.000 alıcı yaklaşık 4 sa 10 dk sürer. Zamana duyarlı trafik bir pazarlama gönderiminin arkasında kuyruğa girmemelidir: bunun için ayrı bir anahtar kullanın.

Mesaj durumu

GET/v1/messages/{batch_id}

Sorgulama desteklenir ve hız sınırlıdır; web kancaları amaçlanan yoldur. Yanıt, toplu işi özetler ve alıcı başına durumu listeler.

200 OK
{
  "batch_id":    "b_7Kq2xR9wLm",
  "status":      "done",
  "sending":     0,
  "delivered":   1,
  "undelivered": 1,
  "refund_usd":  0.0216
}

refund_usd, toplu gönderim tamamlandığında bir kez kesinleşir. Siz onu okuyabildiğinizde zaten bakiyenize geri dönmüştür.

Bakiye

GET/v1/balance

Büyük bir gönderimden önce kontrol edin. Bakiyeler dahili olarak tam sayı mikro-dolar cinsinden tutulur — fiyatlar dört ondalık basamağa kadar gider ve bir ondalıklı sayının (float) hesap hareketlerinde işi yoktur — ve burada altı basamağa yuvarlanarak döndürülür.

200 OK
{ "balance_usd": 412.905400, "currency": "USD" }

Teslim raporları

Operatör bildirdikçe alıcı başına bir makbuz yayımlanır. Bunlar sadece dört durumdur; sessizce "onu kaybettik" anlamına gelen bir "bilinmiyor" kutusu yoktur.

DurumAnlamFaturalandırıldı
queuedKabul edildi, toplu işte sırasını bekliyor.Evet
sentOperatöre teslim edildi, henüz onay yok.Evet
deliveredCihaz bunu onayladı.Evet
undeliveredÖlü, engellenmiş ya da gönderici reddedilmiş.İade edildi

Fiyatlandırılmış bir hedefe hiç karşılık gelmeyen numaralar gönderim sırasında reddedilir ve bu yaşam döngüsüne hiç girmez — önce faturalandırılıp sonra iade edilmezler, basitçe faturalandırılmazlar.

Webhook'lar

Panelde veya toplu iş başına callback_url ile bir uç nokta ayarlayın. JSON POST ediyoruz ve 5 saniye içinde bir 2xx bekliyoruz. 2xx olmayan yanıtlar, yaklaşık bir saat boyunca üstel geri çekilmeyle altı kez yeniden denenir, ardından bırakılır.

Veri yükü

Uç noktanıza POST gönderin
{
  "event":     "message.delivered",
  "batch_id":  "b_7Kq2xR9wLm",
  "to":        "+447700900123",
  "destination": "gb",
  "segments":  1,
  "cost_usd":  0.0137,
  "reference": "order-4471",
  "ts":        1785312041
}

İmza doğrulanıyor

Her teslimat X-WorldSMS-Signature ve X-WorldSMS-Timestamp taşır. İmza, webhook gizli anahtarınızı kullanan HMAC-SHA256(timestamp + "." + body)'dur. Sabit zamanda karşılaştırın ve beş dakikadan eski bir zaman damgasını reddedin, böylece yakalanmış bir teslimat size karşı tekrar oynatılamaz.

verify.php
// $secret is the webhook secret from the dashboard
$raw  = file_get_contents('php://input');
$ts   = $_SERVER['HTTP_X_WORLDSMS_TIMESTAMP'] ?? '';
$sig  = $_SERVER['HTTP_X_WORLDSMS_SIGNATURE'] ?? '';

// A stale timestamp is a replay, however well it is signed.
if (abs(time() - (int) $ts) > 300) { http_response_code(408); exit; }

$mine = hash_hmac('sha256', $ts . '.' . $raw, $secret);
if (!hash_equals($mine, $sig)) { http_response_code(401); exit; }

http_response_code(204);

İdempotent olun

Uç noktanız zaman aşımına uğradıktan sonraki bir yeniden deneme, ilk teslimatla aynı görünür. batch_id + to + event üzerinden anahtarlayın ve bir tekrarı hiçbir işlem yapılmayan bir olay olarak ele alın.

Hatalar

Her başarısızlık, sabit bir error slug'ı içeren bir JSON gövdesi döndürür. Slug üzerinden eşleştirin, metin üzerinden asla — metnin iyileşmesine izin verilir.

HTTPSlugNe yapmalı
400invalid_bodyHatalı biçimlendirilmiş JSON veya eksik zorunlu alan.
401key_rejectedEksik, iptal edilmiş ya da yanlış yazılmış anahtar. Yeniden denenemez.
402insufficient_creditToplu gönderim bakiyeden daha maliyetlidir. Hiçbir şey gönderilmedi; bakiye yükleyip yeniden gönderin.
422no_valid_recipientsHiçbir numara fiyatlandırılmış bir hedefe çözümlenemedi.
422sender_id_invalidfrom 11 karakterden uzun veya sayı olarak okunacak yalnızca rakamlardan oluşan bir dize içeriyor.
429rate_limitedYavaşlayın. Retry-After saniye sayısını taşır.
503route_unavailableBir hedef geçici olarak yönlendirilemiyor. Yeniden denenebilir.
402 Payment Required
{
  "error":       "insufficient_credit",
  "message":     "Batch costs $84.20, balance is $12.05.",
  "required_usd": 84.20,
  "balance_usd":  12.05
}

Limitler

İsteklerAnahtar başına dakikada 60, pik 20. Bunun ötesinde Retry-After ile 429.
Çağrı başına alıcı5,000. Daha büyük listeleri çağrılara bölün veya dosyayı panelden yükleyin.
Gövde boyutu2 MB.
Aktarım hızıKaç anahtarın gönderim yaptığından bağımsız olarak, hesap başına dakikada 200 mesaj.
AnahtarlarSınır yok. Gönderim sistemi başına bir tane, öngörülen kullanım budur.

Hız sınırları API çağrılarına uygulanır, mesajlara değil: 5.000 alıcı taşıyan tek bir çağrı, sınıra karşı yalnızca bir istek olarak sayılır.

Anahtarlar anında verilir. Onay adımı yoktur.

Bir hesaba bakiye yükleyin, panel anında bir tane oluşturur.

Belirli bir şey sorun

Hesabınızı oluşturun

Tek düğme. Tarayıcınız 160 bit'lik bir belirteç üretir ve o belirteç hesabın kendisidir. Doldurulacak başka hiçbir şey ve beklenecek hiç kimse yoktur.

TürkçeTR · Dili değiştirin

Dil