API de vérification par SMS
Dernière modification le 2026/11/03
Exécution des requêtes vers l'API
Deux API partagent une clé : une API REST avec JSON, et le format d'activation SMS que de nombreux outils utilisent déjà. Créez la clé sur la page Clé API de la console ; elle n'est affichée qu'une fois. Limite : 300 requêtes par minute par clé. Chaque commande a une fenêtre de code de 20 minutes, identique à celle de la console.
# 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"
Codes de service et de pays
Les codes de service sont les noms dans les adresses de nos pages de service, par exemple kakaotalk, line, wechat, zalo, naver, shopee et whatsapp. Les codes de pays sont des codes ISO en minuscules : kr, jp, id, ph, vn, th, us. GET /services et GET /countries renvoient les listes complètes.
Flux typique
- Commandez un numéro avec le service et le pays. Enregistrez l'id.
- Entrez le numéro dans l'application et demandez-lui d'envoyer le SMS.
- Lisez la commande toutes les 4 secondes jusqu'à ce qu'un code soit disponible.
- Besoin d'un SMS supplémentaire ? Demandez un autre code, puis relisez. Terminé : finalisez la commande.
- Pas de code ? Annulez pour un remboursement complet. Sans appel, le remboursement se fait automatiquement à la fin de la fenêtre.
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);Retournez les codes d'erreur
API REST
Les erreurs sont renvoyées au format JSON : {"error":{"code","message"}} avec ces statuts HTTP :
| 400 | Champ manquant ou incorrect (missing_filter, bad_json). |
| 401 | Pas de clé ou clé incorrecte (no_key, bad_key). |
| 402 | Crédit insuffisant (no_balance). |
| 404 | Service, pays, commande ou point de terminaison inconnu. |
| 409 | La commande ne peut pas faire cela maintenant (has_code, not_ready, too_many_open, no_numbers). |
| 429 | Plus de 300 requêtes en une minute (rate_limited). |
Format d'activation SMS
| BAD_KEY | Clé API manquante ou incorrecte. |
| BAD_ACTION | Action inconnue. |
| BAD_SERVICE | Code de service inconnu. |
| BAD_COUNTRY | Le service n'est pas vendu dans ce pays. |
| NO_BALANCE | Crédit insuffisant. |
| NO_NUMBERS | Aucun numéro disponible pour le moment. Réessayez dans un instant. |
| NO_ACTIVATION | ID d'activation inconnu ou ne vous appartenant pas. |
| EARLY_CANCEL_DENIED | Un code est déjà arrivé, donc l'activation ne peut pas être annulée. |
| TOO_MANY_REQUESTS | Plus de 300 requêtes en une minute. |
| NO_ACTIVATIONS | 20 activations sont déjà ouvertes. |
Méthodes de l'API REST
https://virtualsns.com/api/v1
GET/services
Chaque code de service avec son nom, type et prix le plus bas. Aucune clé nécessaire.
curl "https://virtualsns.com/api/v1/services"
{"services":[{"code":"kakaotalk","name":"KakaoTalk","category":"social","from":"0.06"}]}GET/countries
Chaque code de pays (ISO, minuscules) avec son nom et son indicatif téléphonique. Aucune clé nécessaire.
curl "https://virtualsns.com/api/v1/countries"
{"countries":[{"code":"kr","name":"South Korea","dial_code":"82"}]}GET/prices
Prix en USD. Ajoutez un service, un pays ou les deux. Aucune clé nécessaire.
curl "https://virtualsns.com/api/v1/prices?service=line&country=jp"
{"prices":[{"service":"line","country":"jp","price":"5.40"}]}GET/balance
Votre crédit en USD.
curl "https://virtualsns.com/api/v1/balance" \ -H "Authorization: Bearer YOUR_KEY"
{"balance":"25.00","currency":"USD"}POST/orders
Achète un numéro (201). Renvoie la commande avec le numéro de téléphone et l'heure de fin de la fenêtre.
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
Une commande avec son statut et chaque code reçu. Statuts : en attente, reçu, terminé, remboursé, annulé.
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
Vos commandes ouvertes (statut=all pour les 100 dernières).
curl "https://virtualsns.com/api/v1/orders?status=open" \ -H "Authorization: Bearer YOUR_KEY"
{"orders":[...]}POST/orders/AC-7K2M9QX4PB/resend
Demande un autre code sur le même numéro, après le premier code et pendant que la fenêtre est ouverte. Pas de frais supplémentaires.
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
Ferme une commande qui a reçu son code.
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
Annule avant l'arrivée d'un code. Le prix total est remboursé sur votre crédit.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/cancel \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"canceled","refunded":"8.40"}}Méthodes du format d'activation SMS
https://virtualsns.com/stubs/handler_api.php
Méthode getBalance
Votre crédit en USD.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getBalance
ACCESS_BALANCE:12.50
Méthode getServicesList
Codes de service que vous pouvez acheter (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getServicesList
{"status":"success","services":[{"code":"line","name":"LINE"}]}Méthode getCountries
Codes de pays (ISO, minuscules) et indicatifs téléphoniques (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getCountries
{"jp":{"name":"Japan","dial":"81"}}Méthode getPrices
Prix en USD par pays et service. Les deux filtres sont optionnels.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getPrices&service=line&country=jp
{"jp":{"line":{"cost":5.4,"count":100}}}Méthode getNumber
Achète un numéro. Renvoie l'ID d'activation et le numéro avec son code de pays.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=line&country=jp
ACCESS_NUMBER:AC-7K2M9QX4PB:819012345678
Méthode getStatus
STATUS_WAIT_CODE (pas encore de code), STATUS_OK :<code>, STATUS_WAIT_RETRY :<dernier code> (un autre code demandé), STATUS_CANCEL (annulé ou remboursé).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getStatus&id=AC-7K2M9QX4PB
STATUS_OK:482913
Méthode setStatus
status=1 prêt (ACCESS_READY), 3 un autre code (ACCESS_RETRY_GET), 6 terminé (ACCESS_ACTIVATION), 8 annulation avec un remboursement complet si aucun code n'est arrivé (ACCESS_CANCEL).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=setStatus&id=AC-7K2M9QX4PB&status=3
ACCESS_RETRY_GET