एसएमएस सत्यापन API
एसएमएस सत्यापन API तीन कॉल है: नंबर ख़रीदें, कोड का इंतज़ार करें, नंबर छोड़ दें। यह 225 देशों में 517 सेवाओं तक पहुँचता है, नंबर €0.07 से शुरू होते हैं, और जिस एक्टिवेशन पर कुछ नहीं आता उसका पैसा बिना सपोर्ट टिकट के लौट जाता है। कुंजियों के स्कोप तय हैं, ख़रीद आइडेम्पोटेंट है, और विरासती handler_api क्लाइंट बिना बदलाव चलते हैं।
API एक ही खाँचे में
28 अग॰ 2026 को अपडेट किया गया- बेस URL
- https://virtualsmsnumbers.com/api/v1
- प्रमाणीकरण
- Bearer कुंजी, या X-Api-Key
- दर सीमा
- 120/मिनट, बर्स्ट 20/सेकंड
- आइडेम्पोटेंसी विंडो
- 24 घंटे
- अपने-आप रिफंड इतने बाद
- 20 मिनट
- सबसे सस्ता एक्टिवेशन
- €0.07
- कवर किए गए देश
- 225
- प्रारूप
- JSON, सेंट, ISO 8601 UTC
कीमतें और स्टॉक इसी समय की ऑपरेटर पूल की हालत से आते हैं, किसी प्रकाशित रेट कार्ड से नहीं।
तीन कॉल वाला फ़्लो
संदर्भ में बाक़ी सब वैकल्पिक है। पूरा सत्यापन रास्ता यही है, और 2019 से इसमें कोई बदलाव नहीं हुआ।
- 1
POST /activations
एक सेवा माँगें, और देश भी अगर उसकी परवाह हो। प्रतिक्रिया में नंबर, सेंट में कीमत और समाप्ति टाइमस्टैम्प आता है। Idempotency-Key भेजें ताकि दोबारा भेजा गया अनुरोध दूसरा नंबर न ख़रीद ले, और अगर कॉल करने वाला स्वचालित है तो max_price_cents भी भेजें।
- 2
GET /activations/{id}?wait=180
लॉन्ग-पोल करें। संदेश आने या टाइमआउट होने तक कनेक्शन खुला रहता है, इसलिए एक अनुरोध उस लूप की जगह ले लेता है जो वरना नब्बे अनुरोध करता। स्थिति code_received के रूप में लौटती है, जिसमें कच्चे टेक्स्ट के साथ पार्स किया गया कोड भी होता है, क्योंकि भेजने वाले उसे अलग-अलग ढंग से लिखते हैं।
- 3
POST /activations/{id}/complete
एक्टिवेशन बंद करें और लाइन छोड़ दें। अगर कुछ नहीं आया, तो कुछ भी न करें: विंडो अपने-आप ख़त्म हो जाती है और पैसा बैलेंस में लौट आता है। जल्दी रद्द करना भी दूसरे नाम से यही कॉल है।
एक चलता हुआ उदाहरण
VSN_KEY सेट करें और चला दें। टिप्पणियों में दी प्रतिक्रियाएँ असली ढाँचे हैं, उन फ़ील्ड समेत जिन्हें आप संग्रहित करना चाहेंगे।
# 1. Buy a Telegram number in Portugal
-kw">curl -X POST https://virtualsmsnumbers.com/api/v1/activations \
-H "Authorization: Bearer $VSN_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"service":"telegram","country":"PT"}'
# {"id":"1043872915","phone_number":"351926114508","status":"waiting",
# "price_cents":11,"expires_at":"2026-08-26T12:41:07Z"}
# 2. Long-poll until the code lands (blocks up to 120 s)
-kw">curl "https://virtualsmsnumbers.com/api/v1/activations/1043872915?wait=120" \
-H "Authorization: Bearer $VSN_KEY"
# {"id":"1043872915","status":"code_received",
# "messages":[{"code":"48219","text":"Telegram code: 48219"}]}
# 3. Release the number
-kw">curl -X POST https://virtualsmsnumbers.com/api/v1/activations/1043872915/complete \
-H "Authorization: Bearer $VSN_KEY"दर सीमाएँ
प्रति कुंजी 120 अनुरोध प्रति मिनट, बर्स्ट में 20 प्रति सेकंड तक। हर प्रतिक्रिया में X-RateLimit-Limit, X-RateLimit-Remaining और X-RateLimit-Reset आते हैं, और 429 आपको अंदाज़ा लगाने देने के बजाय बताता है कि कितनी देर रुकना है।
अगर API का इस्तेमाल जैसा सोचा गया है वैसा हो, तो सीमा शायद ही अड़चन बनती है: नब्बे पोल की जगह एक लॉन्ग पोल, टाइमर की जगह वेबहुक, और देश तथा सेवा सूचियाँ शुरू में ही कैश। अगर सचमुच ज़्यादा गुंजाइश चाहिए तो माँग लें — सीमा बढ़ाना हम दोनों के लिए कुंजियों के पूरे बेड़े को डीबग करने से आसान है।
आइडेम्पोटेंसी
POST /activations पर Idempotency-Key हेडर भेजें। 24 घंटों के भीतर वही कुंजी दोबारा भेजने पर दूसरा नंबर ख़रीदकर दोबारा शुल्क लेने के बजाय, मूल एक्टिवेशन उसकी मौजूदा स्थिति में लौटता है, साथ में Idempotent-Replay हेडर।
कुंजी बॉडी का हैश नहीं है: किसी इस्तेमाल हो चुकी कुंजी के साथ अलग पेलोड भेजने पर भी पहला ही एक्टिवेशन लौटता है। हर तार्किक ख़रीद के लिए एक कुंजी बनाएँ — UUID ठीक रहता है — और उसे दोबारा कोशिशों में इस्तेमाल करें, अलग-अलग ख़रीदों में कभी नहीं।
विरासती handler_api क्लाइंट
क्लासिक handler_api.php प्रोटोकॉल के लिए लिखी स्क्रिप्ट चलती रहती हैं। उन्हें संगतता एंडपॉइंट पर भेजें, api_key बदलें, और वही क्रियाएँ वही ACCESS_ तथा STATUS_ टोकन लौटाएँगी जो हमेशा लौटाती थीं।
यह उसी पूल के ऊपर बनी अनुवाद परत है, इसलिए कीमतें, स्टॉक और रिफंड दोनों तरफ़ एक जैसे बर्ताव करते हैं। फिर भी नए कोड को /api/v1 ही इस्तेमाल करना चाहिए: JSON प्रतिक्रियाओं में वे टाइमस्टैम्प, त्रुटि कोड और कीमत फ़ील्ड आते हैं जिनके लिए टोकन प्रारूप में जगह ही नहीं है।
# Existing scripts keep working: same actions, same response tokens.
BASE="https://virtualsmsnumbers.com/stubs/handler_api.php"
-kw">curl "$BASE?api_key=$KEY&action=getNumber&service=tg&country=117"
# ACCESS_NUMBER:1043872915:351926114508
-kw">curl "$BASE?api_key=$KEY&action=getStatus&id=1043872915"
# STATUS_WAIT_CODE
# STATUS_OK:48219
-kw">curl "$BASE?api_key=$KEY&action=setStatus&id=1043872915&status=6"
# ACCESS_ACTIVATION
-kw">curl "$BASE?api_key=$KEY&action=getBalance"
# ACCESS_BALANCE:41.87एजेंट, MCP और खोज
एक होस्टेड MCP सर्वर, एक OpenAPI 3.1 दस्तावेज़ और एक llms.txt सूचकांक उपलब्ध है, ताकि कोई एजेंट हाथ से लिखे जोड़ के बिना अपने ज़रूरी तीन टूल खोज सके। अपने क्लाइंट को नीचे दिए एंडपॉइंट पर भेजें और उसे ख़रीदना, इंतज़ार करना और छोड़ना मिल जाएगा।
किसी भी स्वायत्त चीज़ को बैलेंस से ख़र्च करने देने से पहले: कुंजी को numbers:read और numbers:write तक सीमित करें, हर ख़रीद पर max_price_cents की छत लगाएँ, और उसे उसकी अपनी कुंजी दें ताकि उसे रद्द करने से आपका प्रोडक्शन इंटीग्रेशन न गिरे।
{
"mcpServers": {
"virtualsmsnumbers": {
"type": "http",
"url": "https://virtualsmsnumbers.com/api/mcp",
"headers": { "Authorization": "Bearer vsn_live_xxxxxxxxxxxx" }
}
}
}प्रोडक्शन से पहले
- हर ख़रीद पर max_price_cents सेट करें। कीमतें पूल के साथ चलती हैं, और बिना सीमा वाला एजेंट ख़ुशी-ख़ुशी उसका महँगा सिरा ख़रीद लेगा।
- पहचानकर्ताओं को अपारदर्शी स्ट्रिंग मानें। एक्टिवेशन आईडी आज दस अंकों की हैं; यह कोई वादा नहीं है, और न ही उनकी लंबाई।
- त्रुटि कोड पर शाखा बनाएँ, संदेश पर कभी नहीं। कोड एक संस्करण के भीतर स्थिर रहते हैं; संदेश इंसानों के लिए लिखे जाते हैं और दोबारा लिखे जाते रहते हैं।
- sms.received की सदस्यता लें और हस्ताक्षर जाँचें — कच्ची बॉडी पर HMAC-SHA256, पाँच मिनट की रीप्ले विंडो के साथ — बजाय उस स्थिति के लिए पोल करने के जो आपको बताई जा सकती है।
- गणना पूर्णांक सेंट फ़ील्ड पर करें। उनके बग़ल में दी फ़ॉर्मेट की गई स्ट्रिंग दिखाने के लिए हैं और भाषा-क्षेत्र पर निर्भर हैं।
पूरा संदर्भ
छह एंडपॉइंट, त्रुटि तालिकाएँ, वेबहुक पेलोड, स्कोप और विरासती टोकन का नक़्शा।
अक्सर पूछे जाने वाले प्रश्न
सेवा के भेजने के क्षण से औसत डिलीवरी नौ सेकंड से कम है। लॉन्ग पोल इसलिए है कि पूँछ लंबी है: एक्टिवेशन 20 मिनट खुला रहता है, और कुछ न आने पर रिफंड के साथ ख़त्म हो जाता है।
आपको कुछ संभालना नहीं है। विंडो बंद हो जाती है, पैसा अपने-आप बैलेंस में लौट आता है, और एक्टिवेशन expired स्थिति में ख़त्म होता है जिसे आप API से पढ़ सकते हैं।
हाँ, और इसका कोई ख़र्च नहीं। कुंजियों के स्कोप तय होते हैं, वैकल्पिक IP अनुमत सूची होती है और बनाते समय चुनी गई समाप्ति तिथि, इसलिए स्टेजिंग कुंजी लीक हो जाए तो भी प्रोडक्शन में नंबर नहीं ख़रीद सकती।
पतले, बिना निर्भरता वाले रैपर हैं, पर यह API छह एंडपॉइंट का JSON इंटरफ़ेस है — तीन कॉल वाले फ़्लो के लिए fetch, requests या curl सचमुच काफ़ी है।
एक ही एक्टिवेशन पर, हाँ: वह खुला रहने तक अतिरिक्त संदेश उसी नंबर पर आते हैं। अलग-अलग सत्रों के लिए रेंटल चाहिए, जो लाइन को चार घंटे से बारह महीने तक रोके रखता है।
नहीं। वही पूल है, वही कीमतें; फ़र्क़ सिर्फ़ प्रतिक्रिया की एन्कोडिंग में है।