# फ़ोन नंबर लुकअप करें

एक कॉल बताती है कि नंबर क्या है। यहाँ हर चीज़ के लिए `lookup` स्कोप वाली API कुंजी चाहिए।

## बेस लुकअप चलाएँ

नंबर भेजें, और कुछ नहीं। बेस लुकअप की बिलिंग हमेशा एक बार होती है, और यह हमेशा देश, सर्विंग नेटवर्क, इश्यूइंग नेटवर्क और एक मोटा लाइन टाइप बताता है।

**TypeScript**

```typescript
const answer = await bird.lookup.phoneNumber({
  phone_number: "+31612345678",
  type: ["classification", "score"],
});
console.log(answer.country_code, answer.line_type);
// Only a block whose status is ok carries a value, and only that one is billed.
if (answer.score?.status === "ok") console.log(answer.score.value);
```

Examples: [TypeScript](/hi-in/dastavez/guides/lookup/phone-numbers.ts.md) · [Python](/hi-in/dastavez/guides/lookup/phone-numbers.py.md) · [Go](/hi-in/dastavez/guides/lookup/phone-numbers.go.md) · [PHP](/hi-in/dastavez/guides/lookup/phone-numbers.php.md) · [CLI](/hi-in/dastavez/guides/lookup/phone-numbers.cli.md) · [MCP](/hi-in/dastavez/guides/lookup/phone-numbers.mcp.md) · [cURL](/hi-in/dastavez/guides/lookup/phone-numbers.curl.md)

## नंबर कैसे लिखें

पहले कंट्री कॉलिंग कोड भेजें, फिर नैशनल नंबर। शुरुआत में `+` वैकल्पिक है और उसकी जगह `00` भी चलता है, इसलिए `+31612345678`, `31612345678` और `0031612345678` सभी एक ही नंबर हैं।

किसी एक देश के भीतर डायलिंग के लिए लिखा गया नंबर, जिसमें कंट्री कोड नहीं है, अनुमान लगाने की बजाय अस्वीकार कर दिया जाता है। `0612345678` [`E22000`](/docs/api/errors/E22000) लौटाता है, क्योंकि कंट्री कोड जोड़ने पर किसी और जगह का असली नंबर बन सकता है और उसे लुकअप करने का शुल्क आपसे लिया जाएगा।

## बेस लुकअप क्या जवाब देता है

`country_code` नंबर का देश है; जब नंबर किसी एक देश से संबंधित नहीं होता, जैसे नॉन-जियोग्राफ़िक रेंज में, तब यह अनुपस्थित रहता है।

`network_info` वह नेटवर्क है जो आज नंबर की सेवा दे रहा है, और `original_network_info` वह नेटवर्क है जिसने इसकी रेंज जारी की। जब नंबर पोर्ट हुआ हो तो ये दोनों अलग होते हैं, और उस स्थिति में `flags` में `ported` होता है।

`line_type` बताता है कि नंबर किस प्रकार की लाइन है: `mobile`, `fixed_line`, `voip`, `toll_free`, `premium_rate`, `satellite`, `pager`, `payphone`, `m2m`, `service`, `other`, या `unknown`। `unknown` का मतलब है कि कैरियर प्लेटफ़ॉर्म के पास इस रेंज के लिए कोई वर्गीकरण नहीं है; `other` का मतलब है कि वर्गीकरण मौजूद है लेकिन यहाँ उसका कोई समकक्ष नहीं है। अधिक सटीक आवंटित सेवा जानने के लिए `classification` प्रॉपर्टी अनुरोध करें। यह एक अलग स्रोत से व्यापक शब्दावली के साथ जवाब देती है, और अलग से रिपोर्ट की जाती है ताकि आप दोनों में हमेशा अंतर कर सकें।

## प्रॉपर्टीज़ जोड़ें

जो प्रॉपर्टीज़ चाहिए उन्हें `type` में नाम दें। हर एक का शुल्क अलग से लगता है और केवल तभी जब वह डिलीवर हो।

| प्रॉपर्टी        | क्या जवाब देती है                                              |
| ---------------- | -------------------------------------------------------------- |
| `classification` | रेंज की सटीक आवंटित सेवा: प्रीमियम रेट, सैटेलाइट, M2M, पेफ़ोन। |
| `porting`        | नंबर ने आखिरी बार कब नेटवर्क बदला, और रिकॉर्ड पर हर बदलाव।     |
| `presence`       | क्या नंबर अभी नेटवर्क पर सक्रिय है।                            |
| `roaming`        | क्या यह रोमिंग पर है, और किस नेटवर्क पर।                       |
| `sim_swap`       | इसका SIM आखिरी बार कब बदला।                                    |
| `score`          | 0 से 100 तक का विश्वसनीयता स्कोर।                              |

`classification`, `porting` और `score` संग्रहित डेटा पढ़ते हैं और तुरंत जवाब देते हैं। `presence`, `roaming` और `sim_swap` लाइव नेटवर्क तक पहुँचते हैं, इसलिए ये धीमे होते हैं और इनकी कवरेज ऑपरेटर के अनुसार भिन्न होती है। संग्रहित वालों की तुलना में इनके लिए `unavailable` या `inconclusive` अधिक बार मिलने की उम्मीद रखें।

दो प्रॉपर्टीज़ उन सवालों का जवाब देती हैं जो बेस लुकअप पहले से छूता है, लेकिन अधिक विस्तार से। `porting` आपको तारीख और पूरा इतिहास देता है, जबकि बेस लुकअप का `ported` फ़्लैग केवल यह बताता है कि कभी बदलाव हुआ या नहीं। `classification` `line_type` को सटीक आवंटित सेवा तक विस्तारित करता है।

## वैल्यू से पहले स्टेटस पढ़ें

हर प्रॉपर्टी ब्लॉक में एक `status` होता है, और केवल `ok` में वैल्यू होती है।

```json
{
  "phone_number": "+441904123456",
  "country_code": "GB",
  "line_type": "service",
  "classification": {
    "status": "ok",
    "value": "premium_rate"
  },
  "score": {
    "status": "unavailable"
  }
}
```

उस जवाब में आपसे बेस लुकअप और `classification` का शुल्क लिया गया। `score` का शुल्क नहीं लिया गया।

पहले `status` पढ़ें और `ok` के अलावा किसी भी चीज़ को "not answered" मानें। यह एक ओपन शब्दावली है, इसलिए जो वैल्यू आप नहीं पहचानते वह भविष्य का स्टेटस है, त्रुटि नहीं।

दो ब्लॉक सटीक आँकड़े की बजाय सीमा (bound) रिपोर्ट करते हैं जब नेटवर्क सटीक आँकड़ा जारी नहीं करता। `sim_swap` `last_swapped_at` के बजाय `min_days` और `max_days` लौटाता है जब केवल हाल की अवधि ज्ञात हो। `porting` `last_ported_at_is_approximate` सेट करता है जब रजिस्ट्री बदलाव की अवधि दर्ज करती है लेकिन उसका दिन नहीं।

एक फ़ील्ड नकारात्मक जैसा दिखता है लेकिन वास्तव में सकारात्मक जानकारी है: `porting.ported` का `false` पर सेट होना इसका मतलब है कि रजिस्ट्री से पूछा गया और इस नंबर के लिए कोई बदलाव दर्ज नहीं है, यह नहीं कि कुछ जाँचा नहीं जा सका। यही अंतर `status` बताता है।

## दोबारा भुगतान किए बिना फिर से प्रयास करें

लुकअप का शुल्क लगता है, इसलिए फिर से प्रयास किए गए अनुरोध को दूसरा जवाब नहीं खरीदना चाहिए। एक `Idempotency-Key` भेजें और उसी अनुरोध की पुनरावृत्ति नया लुकअप चलाने के बजाय संग्रहित जवाब दोबारा लौटाएगी। देखें [Idempotency](/docs/guides/idempotency)।

इस ऑपरेशन का `GET` फ़ॉर्म, जो नंबर को URL में रखता है, idempotency key नहीं ले सकता। किसी भी स्वचालित कार्य के लिए `POST` फ़ॉर्म का उपयोग करें।

## त्रुटियाँ

| कोड                                 | क्या हुआ                                                                                                          |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| [`E22000`](/docs/api/errors/E22000) | नंबर अंतरराष्ट्रीय फ़ॉर्मेट में वैध फ़ोन नंबर नहीं है। कोई शुल्क नहीं लगा।                                        |
| [`E22001`](/docs/api/errors/E22001) | संगठन के वॉलेट में लुकअप के लिए पर्याप्त राशि नहीं है। इसे टॉप अप करें और फिर से प्रयास करें। कोई शुल्क नहीं लगा। |
| [`E22002`](/docs/api/errors/E22002) | लुकअप अस्थायी रूप से अनुपलब्ध है। बैकऑफ़ के साथ फिर से प्रयास करें। कोई शुल्क नहीं लगा।                           |

विफल होने वाली प्रॉपर्टी त्रुटि नहीं है। यह अपने ब्लॉक पर एक स्टेटस के रूप में लौटती है, और बेस लुकअप उसके साथ ही दिया जाता है।

## अगले कदम

- [ईमेल पता लुकअप करें](/docs/guides/lookup/email-addresses) Lookup का दूसरा हिस्सा है।
- [Lookup API संदर्भ](/docs/api/reference/create-phone-number-lookup) हर फ़ील्ड और हर प्रॉपर्टी ब्लॉक का दस्तावेज़ है।
- [दर सीमाएँ](/docs/guides/rate-limits) उस `lookup` बकेट को कवर करती हैं जिससे ये कॉल्स लेती हैं।
- [फ़ोन नंबर लुकअप: भेजने से पहले नंबर जाँचें](/learn/lookup/phone-number-lookup-check-a-number-before-you-send) एक वीडियो है जो लुकअप चलाता है और लाइव नेटवर्क जाँचें जोड़ता है।

## Related resources

- [Phone number lookup](/lookup-api) (product)

[Get an implementation brief](/learn/workspace?topic=lookup-phone)
