Bahasa Melayu

API pengesahan SMS

Terakhir diubah pada 2026/11/03

Menjalankan pertanyaan ke API

Dua API berkongsi satu kunci: API REST dengan JSON, dan format pengaktifan SMS yang sudah digunakan oleh banyak alat. Buat kunci pada halaman Kunci API di konsol; ia hanya ditunjukkan sekali. Had: 300 permintaan seminit setiap kunci. Setiap pesanan mempunyai tetingkap kod 20 minit, sama seperti di konsol.

# 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"
Kod perkhidmatan dan negara

Kod perkhidmatan adalah nama dalam alamat halaman perkhidmatan kami, contohnya kakaotalk, line, wechat, zalo, naver, shopee dan whatsapp. Kod negara adalah kod ISO dalam huruf kecil: kr, jp, id, ph, vn, th, us. GET /services dan GET /countries mengembalikan senarai penuh.

Aliran tipikal
  1. Pesan nombor dengan perkhidmatan dan negara. Simpan id.
  2. Masukkan nombor dalam aplikasi dan minta ia menghantar SMS.
  3. Baca pesanan setiap 4 saat sehingga kod diterima.
  4. Perlukan satu lagi SMS? Minta kod lain, kemudian baca semula. Selesai: tamatkan pesanan.
  5. Tiada kod? Batalkan untuk bayaran balik penuh. Tanpa panggilan, bayaran balik berlaku sendiri apabila tetingkap tamat.

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);
Kembalikan kod ralat

API REST

Ralat datang dalam JSON: {"error":{"code","message"}} dengan status HTTP ini:

400Medan hilang atau tidak betul (missing_filter, bad_json).
401Tiada kunci atau kunci salah (no_key, bad_key).
402Tiada cukup kredit (no_balance).
404Perkhidmatan, negara, pesanan atau endpoint tidak diketahui.
409Pesanan tidak boleh melakukan itu sekarang (has_code, not_ready, too_many_open, no_numbers).
429Lebih daripada 300 permintaan dalam satu minit (rate_limited).

Format pengaktifan SMS

BAD_KEYKunci API hilang atau salah.
BAD_ACTIONTindakan tidak diketahui.
BAD_SERVICEKod perkhidmatan tidak diketahui.
BAD_COUNTRYPerkhidmatan tidak dijual di negara itu.
NO_BALANCETiada cukup kredit.
NO_NUMBERSTiada nombor tersedia sekarang. Cuba lagi sebentar.
NO_ACTIVATIONID pengaktifan tidak diketahui, atau bukan milik anda.
EARLY_CANCEL_DENIEDKod telah diterima, jadi pengaktifan tidak boleh dibatalkan.
TOO_MANY_REQUESTSLebih daripada 300 permintaan dalam satu minit.
NO_ACTIVATIONS20 pengaktifan sudah dibuka.

Kaedah API REST

https://virtualsns.com/api/v1

GET/services

Setiap kod perkhidmatan dengan nama, jenis dan harga terendah. Tiada kunci diperlukan.

curl "https://virtualsns.com/api/v1/services"
{"services":[{"code":"kakaotalk","name":"KakaoTalk","category":"social","from":"0.06"}]}
GET/countries

Setiap kod negara (ISO, huruf kecil) dengan nama dan kod dail. Tiada kunci diperlukan.

curl "https://virtualsns.com/api/v1/countries"
{"countries":[{"code":"kr","name":"South Korea","dial_code":"82"}]}
GET/prices

Harga dalam USD. Tambah perkhidmatan, negara atau kedua-duanya. Tiada kunci diperlukan.

curl "https://virtualsns.com/api/v1/prices?service=line&country=jp"
{"prices":[{"service":"line","country":"jp","price":"5.40"}]}
GET/balance

Kredit anda dalam USD.

curl "https://virtualsns.com/api/v1/balance" \
  -H "Authorization: Bearer YOUR_KEY"
{"balance":"25.00","currency":"USD"}
POST/orders

Membeli nombor (201). Mengembalikan pesanan dengan nombor telefon dan masa tetingkap tamat.

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

Satu pesanan dengan statusnya dan setiap kod yang diterima. Status: menunggu, diterima, selesai, dibayar balik, dibatalkan.

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

Pesanan terbuka anda (status=all untuk 100 terakhir).

curl "https://virtualsns.com/api/v1/orders?status=open" \
  -H "Authorization: Bearer YOUR_KEY"
{"orders":[...]}
POST/orders/AC-7K2M9QX4PB/resend

Meminta kod lain pada nombor yang sama, selepas kod pertama dan semasa tetingkap masih terbuka. Tiada bayaran tambahan.

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

Menutup pesanan yang telah menerima kodnya.

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

Membatalkan sebelum kod tiba. Harga penuh dikembalikan ke kredit anda.

curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/cancel \
  -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"canceled","refunded":"8.40"}}

Kaedah format pengaktifan SMS

https://virtualsns.com/stubs/handler_api.php

Kaedah getBalance

Kredit anda dalam USD.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getBalance
ACCESS_BALANCE:12.50
Kaedah getServicesList

Kod perkhidmatan yang boleh dibeli (JSON).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getServicesList
{"status":"success","services":[{"code":"line","name":"LINE"}]}
Kaedah getCountries

Kod negara (ISO, huruf kecil) dan kod dail (JSON).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getCountries
{"jp":{"name":"Japan","dial":"81"}}
Kaedah getPrices

Harga dalam USD setiap negara dan perkhidmatan. Kedua-dua penapis adalah pilihan.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getPrices&service=line&country=jp
{"jp":{"line":{"cost":5.4,"count":100}}}
Kaedah getNumber

Membeli nombor. Mengembalikan ID pengaktifan dan nombor dengan kod negaranya.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=line&country=jp
ACCESS_NUMBER:AC-7K2M9QX4PB:819012345678
Kaedah getStatus

STATUS_WAIT_CODE (tiada kod lagi), STATUS_OK:<code>, STATUS_WAIT_RETRY:<last code> (kod lain diminta), STATUS_CANCEL (dibatalkan atau dibayar balik).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getStatus&id=AC-7K2M9QX4PB
STATUS_OK:482913
Kaedah setStatus

status=1 sedia (ACCESS_READY), 3 kod lain (ACCESS_RETRY_GET), 6 selesai (ACCESS_ACTIVATION), 8 batalkan dengan bayaran balik penuh jika tiada kod diterima (ACCESS_CANCEL).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=setStatus&id=AC-7K2M9QX4PB&status=3
ACCESS_RETRY_GET
API Pengesahan SMS untuk Nombor KakaoTalk, LINE dan WeChat