Türkçe

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ış
  1. Hizmet ve ülke ile bir numara sipariş edin. Kimliği kaydedin.
  2. Numarayı uygulamaya girin ve SMS göndermesini isteyin.
  3. Bir kod gelene kadar siparişi her 4 saniyede bir okuyun.
  4. Bir SMS daha mı gerekiyor? Başka bir kod isteyin, ardından tekrar okuyun. Tamamlandı: siparişi bitirin.
  5. 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:

400Eksik veya hatalı alan (missing_filter, bad_json).
401Anahtar eksik veya yanlış anahtar (no_key, bad_key).
402Yeterli bakiye yok (no_balance).
404Bilinmeyen hizmet, ülke, sipariş veya endpoint.
409Sipariş şu anda bunu yapamaz (has_code, not_ready, too_many_open, no_numbers).
429Bir dakikada 300'den fazla istek (rate_limited).

SMS aktivasyon formatı

BAD_KEYAPI anahtarı eksik veya yanlış.
BAD_ACTIONBilinmeyen eylem.
BAD_SERVICEBilinmeyen hizmet kodu.
BAD_COUNTRYBu hizmet o ülkede satılmıyor.
NO_BALANCEYeterli bakiye yok.
NO_NUMBERSŞu anda mevcut numara yok. Biraz sonra tekrar deneyin.
NO_ACTIVATIONBilinmeyen aktivasyon kimliği veya size ait değil.
EARLY_CANCEL_DENIEDBir kod zaten geldi, bu yüzden aktivasyon iptal edilemez.
TOO_MANY_REQUESTSBir dakikada 300'den fazla istek.
NO_ACTIVATIONS20 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
KakaoTalk, LINE ve WeChat Numaraları için SMS Doğrulama API