> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tronrental.com/llms.txt
> Use this file to discover all available pages before exploring further.

# सीमाएँ और त्रुटियाँ

> Node API की प्रति सेकंड सीमाएँ, अस्वीकृति कोड, डिग्रेडेड मोड और दोबारा कोशिश

## प्रति सेकंड सीमाएँ

हर कॉल तीन श्रेणियों में से किसी एक की होती है। वह आपका कोटा और अपनी श्रेणी की प्रति सेकंड सीमा खर्च
करती है:

| श्रेणी | कॉल | किसमें सीमित |
| - | - | - |
| ब्लॉक | `getnowblock`, `getblockbynum`, `getblockbyid`, `"detail": true` के साथ `getblock`, `getblockbylimitnext`, `getblockbylatestnum`, `gettransactioninfobyblocknum`, और इनके gRPC जुड़वाँ | प्रति सेकंड कॉल |
| ब्रॉडकास्ट | `broadcasttransaction`, `broadcasthex`, gRPC `BroadcastTransaction` | प्रति सेकंड ट्रांज़ैक्शन |
| रीड | बाकी सब | प्रति सेकंड WU |

संख्याएँ प्लान पर निर्भर करती हैं — देखें [प्लान और बिलिंग](/hi/node-api/plans)। सीमाएँ प्लान की होती
हैं और उसके सभी एंडपॉइंट में साझा होती हैं।

हर सीमा में एक सेकंड जितनी गुंजाइश होती है। उदाहरण के लिए, 30 WU/s के साथ एक बार में 30 WU तक गुज़र
सकते हैं, और फिर सीमा 30 WU प्रति सेकंड की दर से भरती है। रीड तब तक अंदर जाने दी जाती है जब तक रीड
सीमा में ज़रा भी जगह बची हो, और उसकी कीमत जवाब के बाद काटी जाती है: एक भारी रीड सीमा को शून्य से नीचे
ले जा सकती है, और अगली रीड तब तक इंतज़ार करती हैं जब तक सीमा फिर से भर न जाए। ब्लॉक रेंज प्रति कॉल
अधिकतम 10 ब्लॉक लौटाती है।

## त्रुटि प्रारूप

अस्वीकृति एक JSON है, जिसमें `Error` में संदेश और मशीन द्वारा पढ़ा जा सकने वाला `code` होता है:

```json theme={null}
{"Error": "read limit (WU/s) exceeded", "code": "rate_read"}
```

`code` का इस्तेमाल करें; संदेश बदल सकता है। अस्वीकृति में हमेशा `code` होता है। नोड की अपनी त्रुटियों में
नहीं होता: java-tron `code` के बिना `{"Error": "…"}` लौटाता है, आमतौर पर स्टेटस `200` के साथ, और ऐसे
जवाब का शुल्क किसी भी दूसरे जवाब की तरह लगता है — देखें [कोटा इकाइयाँ](/hi/node-api/quota-units)।

अस्वीकृतियों का शुल्क नहीं लगता और उनमें `X-Node-API-WU` नहीं होता, सिवाय `method_not_found` के, जिसमें
`X-Node-API-WU: 0` होता है। `429` और `503` अस्वीकृतियों में आमतौर पर `Retry-After` होता है।

## अस्वीकृति कोड

| स्टेटस | `code` | अर्थ | क्या करें |
| - | - | - | - |
| `400` | `key_conflict` | एक रिक्वेस्ट में दो अलग-अलग कुंजियाँ | एक कुंजी भेजें |
| `400` | `bad_request` | रिक्वेस्ट को उस तरह नहीं पढ़ा जा सकता जैसे नोड उसे पढ़ता: रेंज में 10 से ज़्यादा ब्लॉक, ऐसा ब्लॉक नंबर जो पूर्णांक नहीं है, दो बार दिया गया पैरामीटर, ब्लॉक पैरामीटर क्वेरी और बॉडी दोनों में, ब्लॉक मेथड की बॉडी में अज्ञात फ़ील्ड, ऐसा `detail` जो `true` या `false` नहीं है | रिक्वेस्ट ठीक करें |
| `401` | `no_key` | रिक्वेस्ट में कोई कुंजी नहीं | कुंजी जोड़ें |
| `401` | `unknown_key` | ऐसी कोई कुंजी नहीं: गलत टाइप की गई, हटाई गई, REST API कुंजी, या लगभग 30 सेकंड से कम पहले बनाई गई | कुंजी जाँचें |
| `403` | `key_disabled` | एंडपॉइंट बंद है — आपने बंद किया, या रिन्यूअल पर प्लान की एंडपॉइंट सीमा के कारण | डैशबोर्ड में उसे चालू करें |
| `403` | `ip_not_allowed` | रिक्वेस्ट का IP पता एंडपॉइंट की अनुमति सूची में नहीं है | पता जोड़ें |
| `403` | `no_plan` | खाते के पास कोई Node API प्लान नहीं है | प्लान लें |
| `403` | `plan_expired` | सब्सक्रिप्शन सक्रिय नहीं है: रिन्यूअल का भुगतान बाकी है, सब्सक्रिप्शन समाप्त हो गया है, या ट्रायल खत्म हो गया है | टॉप अप करें या प्लान लें |
| `403` | `account_blocked` | खाते के लिए API पहुँच निलंबित है | सपोर्ट से संपर्क करें |
| `404` | `not_found` | नोड मेथड का पाथ नहीं: `/wallet/*` और `/walletsolidity/*` से बाहर (उदाहरण के लिए `/v1/...` या `/jsonrpc`), या ऐसा मेथड नाम जिसमें अक्षरों और अंकों के अलावा दूसरे वर्ण हों | पाथ जाँचें |
| `404` | `method_not_found` | नोड में ऐसा कोई मेथड नहीं है। मेथड के नाम केस-सेंसिटिव हैं, जैसे java-tron में: `getaccount`, लेकिन `getReward`। 0 WU लगते हैं | स्पेलिंग जाँचें |
| `405` | `method_not_allowed` | `GET` या `POST` के अलावा कोई दूसरा HTTP मेथड | `GET` या `POST` का इस्तेमाल करें |
| `413` | `body_too_large` | रिक्वेस्ट बॉडी 512 KB से बड़ी है | छोटी बॉडी भेजें |
| `429` | `rate_read` | रीड सीमा (प्रति सेकंड WU) पूरी हो गई | `Retry-After` तक इंतज़ार करें |
| `429` | `rate_block` | ब्लॉक कॉल की सीमा (प्रति सेकंड कॉल) पूरी हो गई | `Retry-After` तक इंतज़ार करें |
| `429` | `rate_write` | ब्रॉडकास्ट सीमा (प्रति सेकंड ट्रांज़ैक्शन) पूरी हो गई | `Retry-After` तक इंतज़ार करें |
| `429` | `trials` | सभी ट्रायल की साझा क्षमता व्यस्त है | `Retry-After` तक इंतज़ार करें |
| `429` | `quota` | बिना अतिरिक्त उपयोग वाले प्लान (ट्रायल) पर कोटा खत्म हो गया | प्लान लें |
| `429` | `overage_budget` | कोटा खत्म हो गया है और बैलेंस अब अतिरिक्त उपयोग को कवर नहीं करता | बैलेंस टॉप अप करें |
| `502` | `node_error` | नोड ने जवाब नहीं दिया, या 30 सेकंड के भीतर जवाब नहीं दिया | दोबारा कोशिश करें |
| `503` | `degraded` | डिग्रेडेड मोड के दौरान पुराना ब्लॉक, उसकी रसीदें या ब्लॉक रेंज | बाद में दोबारा कोशिश करें — नीचे देखें |
| `503` | `capacity` | सेवा की साझा क्षमता भरी हुई है | `Retry-After` तक इंतज़ार करें |
| `503` | `capacity_write` | सेवा की साझा ब्रॉडकास्ट क्षमता भरी हुई है | `Retry-After` तक इंतज़ार करें |
| `503` | `busy` | 2 सेकंड के भीतर नोड से कोई खाली कनेक्शन नहीं मिला | `Retry-After` तक इंतज़ार करें |
| `503` | `no_node` | अभी कोई नोड उपलब्ध नहीं है | `Retry-After` तक इंतज़ार करें |
| `503` | `no_snapshot` | सेवा अभी कुंजियाँ नहीं जाँच सकती | `Retry-After` तक इंतज़ार करें |

gRPC पर यही कोड `x-node-api-reason` ट्रेलिंग मेटाडेटा में आते हैं, HTTP स्टेटस की जगह gRPC स्टेटस के
साथ — देखें [gRPC](/hi/node-api/grpc)।

## डिग्रेडेड मोड

जब Node API के लिए हमारा मुख्य नोड उपलब्ध नहीं होता या नेटवर्क से पीछे रह जाता है, तो सेवा रिज़र्व नोड
पर चलती रहती है। उस दौरान:

* जवाब दी गई कॉल में हेडर `X-Node-API-Mode: degraded` होता है (gRPC पर ट्रेलिंग मेटाडेटा
  `x-node-api-mode: degraded`);
* प्रति सेकंड WU वाली आपकी रीड सीमा आधी हो जाती है; ब्लॉक कॉल और ब्रॉडकास्ट की सीमाएँ पहले जैसी रहती हैं;
* ताज़ा ब्लॉक — हेड से 20 के भीतर — और उनकी रसीदें हमेशा की तरह मिलती हैं, जबकि पुराने ब्लॉक, उनकी
  रसीदें और ब्लॉक रेंज `503 degraded` के साथ अस्वीकार होते हैं;
* साझा क्षमता कम होती है, इसलिए `503 capacity` की संभावना ज़्यादा होती है।

ब्रॉडकास्ट में कभी कटौती नहीं होती। सामान्य मोड अपने आप लौट आता है; आपको कुछ करने की ज़रूरत नहीं।
अगर आपका ऐप पुराने ब्लॉक पढ़ता है, तो हेडर मौजूद रहने तक वह काम रोक दें और हेडर हटने पर फिर शुरू करें।

## दोबारा कोशिश करना

* `429 rate_read`, `rate_block`, `rate_write`, `trials` और हर `503`: `Retry-After` में दिए गए सेकंड तक
  इंतज़ार करें, फिर दोबारा कोशिश करें।
* `429 quota` और `429 overage_budget`: इंतज़ार से मदद नहीं मिलती। बैलेंस टॉप अप करें या प्लान बदलें।
* `502 node_error`: दोबारा कोशिश करें। वही साइन किया हुआ ट्रांज़ैक्शन दोबारा भेजना सुरक्षित है — नेटवर्क
  किसी ट्रांज़ैक्शन ID को केवल एक बार निष्पादित करता है।
* अन्य `4xx`: रिक्वेस्ट ठीक करें; उसे दोहराने पर वही जवाब मिलेगा।

```python theme={null}
import time
import requests

NODE = "https://node.tronrental.com"
HEADERS = {"TRON-PRO-API-KEY": "<YOUR_KEY>"}
STOP = {"quota", "overage_budget"}  # इंतज़ार से मदद नहीं मिलेगी

def node_call(method, body=None, attempts=5):
    for attempt in range(attempts):
        resp = requests.post(f"{NODE}/wallet/{method}", json=body or {}, headers=HEADERS)
        if resp.status_code in (429, 502, 503):
            try:
                code = resp.json().get("code")
            except ValueError:
                code = None  # हमारा JSON नहीं, जैसे प्रॉक्सी का त्रुटि पेज
            if code in STOP:
                raise RuntimeError(f"Node API: {code}")
            time.sleep(int(resp.headers.get("Retry-After", 2 ** attempt)))
            continue
        return resp
    raise RuntimeError("Node API: retries exhausted")
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.