नंबर खरीदना और रिलीज़ करना
नंबर खरीदने में दो कॉल लगती हैं: पहले किसी देश में बिक्री पर क्या है यह खोजें, फिर अपनी पसंद का नंबर ऑर्डर करें। यहाँ सब कुछ numbers स्कोप वाली API key चाहता है, और किसी ऑर्गनाइज़ेशन में पहली खरीदारी के लिए पहचान सत्यापन ज़रूरी है।
किसी देश में खोजें
खोज हमेशा एक देश तक सीमित होती है, इसलिए country_code ज़रूरी है। number_type, capabilities, या राष्ट्रीय अंकों के prefix से इसे और सीमित करें।
// The search is always country-scoped, so country_code is required.
const page = await bird.numbers.available.list({
country_code: "GB",
capabilities: ["sms", "voice"],
});
for (const candidate of page.data) {
console.log(candidate.number, candidate.number_type);
}# The search is always country-scoped, so country_code is required.
page = client.numbers.available.list(country_code="GB", capabilities=["sms", "voice"])
for candidate in page.data:
print(candidate.number, candidate.number_type)for candidate, err := range client.Numbers.Available.List(context.Background(), bird.NumbersAvailableListParams{
CountryCode: "GB",
Capabilities: []string{"sms", "voice"},
}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(candidate.Number, candidate.NumberType)
}// The search is always country-scoped, so country_code is required.
$page = $bird->numbers->available->list([
'country_code' => 'GB',
'capabilities' => ['sms', 'voice'],
]);
foreach ($page as $candidate) {
echo $candidate->getNumber(), ' ', $candidate->getNumberType(), "\n";
}curl "https://us1.platform.bird.com/v1/numbers/available?country_code=GB" \
-H "Authorization: Bearer bk_us1_..."उस रीजनल होस्ट का उपयोग करें जो आपकी key के bk_{region}_ प्रीफ़िक्स से मेल खाता हो: https://us1.platform.bird.com या https://eu1.platform.bird.com।
हर परिणाम में केवल वही जानकारी होती है जो आपको चुनने के लिए चाहिए:
कोड उदाहरण
{
"data": [
{
"number": "+447700900123",
"country_code": "GB",
"number_type": "mobile",
"capabilities": ["sms", "voice"]
}
],
"next_cursor": null,
"prev_cursor": null
}हमारी अपनी इन्वेंटरी पहले लौटती है और सामान्य रूप से पेज होती है। आखिरी पेज में ऐसे नंबर शामिल हो सकते हैं जो कोई कैरियर लाइव ऑफ़र कर रहा है, इसलिए कुछ समय पहले सूचीबद्ध नंबर ऑर्डर करते समय तक बिक चुका हो सकता है।
ऑर्डर करने से पहले यह पुष्टि करने के लिए कि नंबर अभी भी उपलब्ध है, उसे GET /v1/numbers/available/{number} से वापस पढ़ें। 404 का मतलब है कि वह नंबर वर्तमान में बिक्री के लिए उपलब्ध नहीं है, चाहे कैरियर ने उसे वापस ले लिया हो या हमारी अपनी इन्वेंट्री में वह रिज़र्व हो। री-चेक उसी numbers_availability अनुरोध दर सीमा का उपयोग करता है जो सर्च के लिए है, इसलिए हर रिज़ल्ट की बजाय केवल उस उम्मीदवार को री-चेक करें जिसे आप ऑर्डर करने वाले हैं।
नंबर ऑर्डर करें
खोज से प्राप्त नंबर को POST /v1/numbers/orders में पास करें। फिर से प्रयास करने की सुरक्षा के लिए, Idempotency देखें।
const order = await bird.numbers.orders.create({ number: "+447700900201" });
// Most orders finish inside the request. One that has to wait on a carrier
// comes back without a number_id. Poll it until it is completed or failed.
if (order.status === "completed") {
console.log("allocated as", order.number_id);
} else {
console.log("still", order.status, "; poll", order.id);
}order = client.numbers.orders.create(number="+447700900201")
# Most orders finish inside the request. One that has to wait on a carrier
# comes back without a number_id. Poll it until completed or failed.
if order.status == "completed":
print("allocated as", order.number_id)
else:
print("still", order.status, "; poll", order.id)order, err := client.Numbers.Orders.Create(context.Background(), bird.NumbersOrdersCreateParams{
Number: "+447700900201",
})
if err != nil {
log.Fatal(err)
}
// An order that has to wait on a carrier comes back without a NumberId.
// Poll it until it is completed or failed.
fmt.Println(order.Status, order.Id)$order = $bird->numbers->orders->create(
(new NumbersOrderCreate())->setNumber('+447700900201'),
);
// Most orders finish inside the request. One that has to wait on a carrier
// comes back without a number_id. Poll it until it is completed or failed.
if ($order->getStatus() === 'completed') {
echo 'allocated as ', $order->getNumberId(), "\n";
} else {
echo 'still ', $order->getStatus(), '; poll ', $order->getId(), "\n";
}curl -X POST "https://us1.platform.bird.com/v1/numbers/orders" \
-H "Authorization: Bearer bk_us1_..." \
-H "Content-Type: application/json" \
-d '{"number": "+447700900123"}'अधिकांश ऑर्डर रिक्वेस्ट के भीतर ही पूरे हो जाते हैं और 201 के साथ जवाब देते हैं, नंबर पहले से आपका होता है:
कोड उदाहरण
{
"id": "nor_01m0da22b0e39anhzyhtw3gzdg",
"number": "+447700900123",
"country_code": "GB",
"number_type": "mobile",
"status": "completed",
"number_id": "nda_7eqywfwzxwa1za9n8wp7e1xkr8",
"failure_reason": null,
"completed_at": "2026-08-19T15:25:56.479320Z",
"created_at": "2026-08-19T15:25:56.448051Z",
"updated_at": "2026-08-19T15:25:56.479320Z"
}number_id इसके बाद हर चीज़ के लिए हैंडल है: नंबर पढ़ना और उसे रिलीज़ करना।
अधूरे ऑर्डर को पोल करें
जिस ऑर्डर को कैरियर की प्रतीक्षा करनी होती है, वह 202 के साथ जवाब देता है, जहाँ number_id अभी भी null होता है। इसे तब तक वापस पढ़ें जब तक status completed या failed न हो जाए।
const order = await bird.numbers.orders.get("nor_01krdgeqcxet5s7t44vh8rt9mg");
// failure_reason says what went wrong, and only ever on a failed order.
console.log(order.status, order.failure_reason ?? "");order = client.numbers.orders.get("nor_01krdgeqcxet5s7t44vh8rt9mg")
# failure_reason says what went wrong, and only ever on a failed order.
print(order.status, order.failure_reason or "")order, err := client.Numbers.Orders.Get(context.Background(), "nor_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
// FailureReason says what went wrong, and only ever on a failed order.
fmt.Println(order.Status)$order = $bird->numbers->orders->get('nor_01krdgeqcxet5s7t44vh8rt9mg');
// failure_reason says what went wrong, and only ever on a failed order.
echo $order->getStatus(), ' ', $order->getFailureReason() ?? '', "\n";curl "https://us1.platform.bird.com/v1/numbers/orders/nor_01m0da22b0e39anhzyhtw3gzdg" \
-H "Authorization: Bearer bk_us1_..."एक ऑर्डर charging, ordering, और pending से गुज़रता है और फिर स्थिर होता है। failed पर, failure_reason सरल शब्दों में बताता है कि क्या गलत हुआ। पहले से ली गई सेटअप फ़ीस वापस नहीं की जाती, इसलिए एक विफल ऑर्डर के पीछे शुल्क रह सकता है; अगर ऐसा हो तो सपोर्ट से संपर्क करें।
नंबर रिलीज़ करें
रिलीज़ करने से मासिक शुल्क बंद हो जाता है और नंबर आपके लिए काम करना बंद कर देता है। केवल dedicated नंबर ही रिलीज़ किया जा सकता है, और रिलीज़ किया गया नंबर तुरंत बिक्री पर वापस नहीं आता।
// Releasing stops the monthly charge and the number stops working for you.
// Only a dedicated number can be released; a shared one answers E14002.
await bird.numbers.release("nda_01krdgeqcxet5s7t44vh8rt9mg");# Releasing stops the monthly charge and the number stops working for you.
# Only a dedicated number can be released; a shared one answers E14002.
client.numbers.release("nda_01krdgeqcxet5s7t44vh8rt9mg")// Only a dedicated number can be released; a shared one answers E14002.
if err := client.Numbers.Release(context.Background(), "nda_01krdgeqcxet5s7t44vh8rt9mg"); err != nil {
log.Fatal(err)
}// Releasing stops the monthly charge and the number stops working for you.
// Only a dedicated number can be released; a shared one answers E14002.
$bird->numbers->release('nda_01krdgeqcxet5s7t44vh8rt9mg');curl -X DELETE "https://us1.platform.bird.com/v1/numbers/nda_7eqywfwzxwa1za9n8wp7e1xkr8" \
-H "Authorization: Bearer bk_us1_..."सफल रिलीज़ बिना बॉडी के 204 के साथ जवाब देता है।
जब कोई ऑर्डर अस्वीकार हो जाए
चार अस्वीकृतियाँ लगभग हर विफल खरीदारी को कवर करती हैं।
402 E03000 के साथ, यानी वॉलेट में नंबर के लिए पर्याप्त बैलेंस नहीं है। टॉप अप करें और फिर से ऑर्डर करें। कोई ऑर्डर नहीं बनता, इसलिए कुछ भी चार्ज नहीं होता।
412 का मतलब है कि संगठन ने पहली खरीदारी के लिए आवश्यक पहचान सत्यापन पूरा नहीं किया है। इसे पूरा करें, फिर फिर से प्रयास करें।
409 E14000 के साथ, यानी जब आप चुन रहे थे तब नंबर बिक गया। फिर से सर्च करें और कोई दूसरा चुनें।
409 E14001 के साथ, यानी आपके बहुत सारे ऑर्डर पहले से प्रोसेस में हैं। एक पूरा होने दें, फिर दोबारा ऑर्डर करें।
अगले कदम
- Numbers overview बताता है कि किसी नंबर पर मौजूद फ़ील्ड का क्या मतलब है।
- Numbers API reference हर ऑपरेशन और फ़ील्ड का दस्तावेज़ीकरण करता है।
- Idempotency बताता है कि कुंजियाँ फिर से प्रयास किए गए ऑर्डर को कैसे सुरक्षित बनाती हैं।
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।
कॉन्सेप्ट समझेंWhat is a virtual phone number (VMN)?क्षमता जानेंSMS numbersइम्प्लीमेंटेशन गाइडNumber types
इम्प्लीमेंटेशन ब्रीफ़ पाएँ