SMS doğrulama API
Son değiştirilme tarihi: 2026/11/03
API'ye sorgular gönderme
İki API bir anahtar paylaşır: JSON ile bir REST API ve birçok araç tarafından zaten kullanılan SMS aktivasyon formatı. Anahtarı konsolun API anahtarı sayfasında oluşturun; yalnızca bir kez gösterilir. Limit: anahtar başına dakikada 300 istek. Her siparişin konsoldakiyle aynı 20 dakikalık bir kod penceresi vardır.
# REST API (JSON) curl https://virtualsns.com/api/v1/balance -H "Authorization: Bearer YOUR_KEY" # SMS activation format curl "https://virtualsns.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getBalance"
Hizmet ve ülke kodları
Hizmet kodları, hizmet sayfası adreslerimizdeki isimlerdir, örneğin kakaotalk, line, wechat, zalo, naver, shopee ve whatsapp. Ülke kodları küçük harflerle ISO kodlarıdır: kr, jp, id, ph, vn, th, us. GET /services ve GET /countries tam listeleri döndürür.
Tipik akış
- Hizmet ve ülke ile bir numara sipariş edin. Kimliği kaydedin.
- Numarayı uygulamaya girin ve SMS göndermesini isteyin.
- Bir kod gelene kadar siparişi her 4 saniyede bir okuyun.
- Bir SMS daha mı gerekiyor? Başka bir kod isteyin, ardından tekrar okuyun. Tamamlandı: siparişi bitirin.
- Kod gelmedi mi? Tam iade için iptal edin. Bir çağrı olmadan, pencere sona erdiğinde iade kendiliğinden gerçekleşir.
Python
import os, time, requests
API = "https://virtualsns.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['VIRTUALSNS_KEY']}"}
order = requests.post(f"{API}/orders", headers=H,
data={"service": "kakaotalk", "country": "kr"}).json()["order"]
print("Use this number:", order["phone"])
while True:
o = requests.get(f"{API}/orders/{order['id']}", headers=H).json()["order"]
if o["code"] or o["status"] in ("refunded", "canceled"):
break
time.sleep(4)
print("Code:", o["code"])Node.js
const API = "https://virtualsns.com/api/v1";
const H = { Authorization: `Bearer ${process.env.VIRTUALSNS_KEY}` };
const { order } = await fetch(`${API}/orders`, {
method: "POST", headers: H,
body: new URLSearchParams({ service: "line", country: "jp" }),
}).then((r) => r.json());
console.log("Use this number:", order.phone);
let o = order;
while (!o.code && !["refunded", "canceled"].includes(o.status)) {
await new Promise((r) => setTimeout(r, 4000));
({ order: o } = await fetch(`${API}/orders/${order.id}`, { headers: H }).then((r) => r.json()));
}
console.log("Code:", o.code);Hata kodlarını döndür
REST API
Hatalar JSON olarak gelir: {"error":{"code","message"}} şu HTTP durumlarıyla:
| 400 | Eksik veya hatalı alan (missing_filter, bad_json). |
| 401 | Anahtar eksik veya yanlış anahtar (no_key, bad_key). |
| 402 | Yeterli bakiye yok (no_balance). |
| 404 | Bilinmeyen hizmet, ülke, sipariş veya endpoint. |
| 409 | Sipariş şu anda bunu yapamaz (has_code, not_ready, too_many_open, no_numbers). |
| 429 | Bir dakikada 300'den fazla istek (rate_limited). |
SMS aktivasyon formatı
| BAD_KEY | API anahtarı eksik veya yanlış. |
| BAD_ACTION | Bilinmeyen eylem. |
| BAD_SERVICE | Bilinmeyen hizmet kodu. |
| BAD_COUNTRY | Bu hizmet o ülkede satılmıyor. |
| NO_BALANCE | Yeterli bakiye yok. |
| NO_NUMBERS | Şu anda mevcut numara yok. Biraz sonra tekrar deneyin. |
| NO_ACTIVATION | Bilinmeyen aktivasyon kimliği veya size ait değil. |
| EARLY_CANCEL_DENIED | Bir kod zaten geldi, bu yüzden aktivasyon iptal edilemez. |
| TOO_MANY_REQUESTS | Bir dakikada 300'den fazla istek. |
| NO_ACTIVATIONS | 20 aktivasyon zaten açık. |
REST API metodları
https://virtualsns.com/api/v1
GET/services
Her hizmet kodu adı, türü ve en düşük fiyatıyla birlikte. Anahtar gerekmez.
curl "https://virtualsns.com/api/v1/services"
{"services":[{"code":"kakaotalk","name":"KakaoTalk","category":"social","from":"0.06"}]}GET/countries
Her ülke kodu (ISO, küçük harf) adı ve telefon koduyla birlikte. Anahtar gerekmez.
curl "https://virtualsns.com/api/v1/countries"
{"countries":[{"code":"kr","name":"South Korea","dial_code":"82"}]}GET/prices
USD cinsinden fiyatlar. Hizmet, ülke veya her ikisini ekleyin. Anahtar gerekmez.
curl "https://virtualsns.com/api/v1/prices?service=line&country=jp"
{"prices":[{"service":"line","country":"jp","price":"5.40"}]}GET/balance
USD cinsinden bakiyeniz.
curl "https://virtualsns.com/api/v1/balance" \ -H "Authorization: Bearer YOUR_KEY"
{"balance":"25.00","currency":"USD"}POST/orders
Bir numara satın alır (201). Telefon numarası ve pencerenin sona ereceği zamanla birlikte siparişi döndürür.
curl -X POST https://virtualsns.com/api/v1/orders \ -H "Authorization: Bearer YOUR_KEY" \ -d service=kakaotalk -d country=kr
{"order":{"id":"AC-7K2M9QX4PB","service":"kakaotalk","country":"kr","phone":"+821023456789","status":"waiting","code":null,"expires_at":"2026-11-03T12:20:00.000Z"},"window_minutes":20}GET/orders/AC-7K2M9QX4PB
Durumu ve alınan her kodla birlikte bir sipariş. Durumlar: bekleniyor, alındı, tamamlandı, iade edildi, iptal edildi.
curl "https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB" \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"id":"AC-7K2M9QX4PB","status":"received","code":"482193","sms":"[Kakao] Verification code [482193]"}}GET/orders
Açık siparişleriniz (son 100 için status=all).
curl "https://virtualsns.com/api/v1/orders?status=open" \ -H "Authorization: Bearer YOUR_KEY"
{"orders":[...]}POST/orders/AC-7K2M9QX4PB/resend
İlk koddan sonra ve pencere açıkken aynı numarada başka bir kod ister. Ek ücret yoktur.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/resend \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"received","waiting_for_resend":true}}POST/orders/AC-7K2M9QX4PB/finish
Kodunu alan bir siparişi kapatır.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/finish \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"finished"}}POST/orders/AC-7K2M9QX4PB/cancel
Bir kod gelmeden önce iptal eder. Tam fiyat bakiyenize geri döner.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/cancel \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"canceled","refunded":"8.40"}}SMS aktivasyon formatı metodları
https://virtualsns.com/stubs/handler_api.php
Metod getBalance
USD cinsinden bakiyeniz.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getBalance
ACCESS_BALANCE:12.50
Metod getServicesList
Satın alabileceğiniz hizmet kodları (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getServicesList
{"status":"success","services":[{"code":"line","name":"LINE"}]}Metod getCountries
Ülke kodları (ISO, küçük harf) ve telefon kodları (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getCountries
{"jp":{"name":"Japan","dial":"81"}}Metod getPrices
Ülke ve hizmet başına USD cinsinden fiyatlar. Her iki filtre de isteğe bağlıdır.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getPrices&service=line&country=jp
{"jp":{"line":{"cost":5.4,"count":100}}}Metod getNumber
Bir numara satın alır. Aktivasyon kimliği ve ülke koduyla birlikte numarayı döndürür.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=line&country=jp
ACCESS_NUMBER:AC-7K2M9QX4PB:819012345678
Metod getStatus
STATUS_WAIT_CODE (henüz kod yok), STATUS_OK:<code>, STATUS_WAIT_RETRY:<son kod> (başka bir kod istendi), STATUS_CANCEL (iptal edildi veya iade edildi).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getStatus&id=AC-7K2M9QX4PB
STATUS_OK:482913
Metod setStatus
status=1 hazır (ACCESS_READY), 3 başka bir kod (ACCESS_RETRY_GET), 6 tamamlandı (ACCESS_ACTIVATION), 8 kod gelmeden tam iade ile iptal (ACCESS_CANCEL).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=setStatus&id=AC-7K2M9QX4PB&status=3
ACCESS_RETRY_GET