# चेंजलॉग

## सितंबर 2026

### 10 सितंबर

**HTML फ़ॉर्म अब साइन किया हुआ कंटेनर सबमिट करता है।** इनवॉइस के अलग-अलग फ़ील्ड की जगह — `data` (JSON का base64url) और `signature` (`data` स्ट्रिंग का HMAC-SHA256)। endpoint `invoices/createFromForm` से बदलकर `invoices/form` हो गया। पुराने फ़ॉर्म अब काम नहीं करते और उन्हें दोबारा बनाना होगा: देखें [HTML फ़ॉर्म का हस्ताक्षर](./creating-invoices/html-forms/form-signature.md)।

### 8 सितंबर

**Webhook की बॉडी में संख्यात्मक फ़ील्ड अब संख्याएँ हैं।** छह फ़ील्ड, जो पहले स्ट्रिंग के रूप में भेजे जाते थे, अब संख्याओं के रूप में भेजे जाते हैं: `project.commissionRate`, `invoice.commissionFiatUSD`, `invoice.amountFiatUSD`, `invoice.amountFiat`, `invoice.calcAmountFiat`, `payment.amount`। फ़ील्ड का सेट, उनके नाम और क्रम नहीं बदले हैं।

ध्यान रखें: आख़िर के शून्य हट जाते हैं, इसलिए 10.00 की राशि 10 बनकर आती है। 0.0001 से छोटी राशियाँ exponential notation में आती हैं, जैसे 1.0e-6 — सामान्य JSON पार्सिंग सही संख्या लौटाती है; सिर्फ़ स्ट्रिंग को हाथ से पार्स करना टूटता है।

रोलआउट से पहले बनी और अभी न पहुँची सूचनाएँ पुराने फ़ॉर्मैट में आती हैं। जब तक कतार खाली नहीं हो जाती, रिसीवर को दोनों रूप स्वीकार करने चाहिए — इसमें दो दिन से ज़्यादा नहीं लगता।

### 6 सितंबर

**API के जवाबों में संख्यात्मक फ़ील्ड अब संख्याएँ हैं।** `invoices/list`, `payments/list` और `invoices/create` पर लागू होता है।

| फ़ील्ड               | पहले           | बाद में  |
| ------------------- | ---------------- | ------ |
| `commissionFiatUSD` | `"0.10"`         | `0.1`  |
| `amountFiatUSD`     | `"10.00"`        | `10`   |
| `amountFiat`        | `"1000.00"`      | `1000` |
| `views`             | `"0"`            | `0`    |
| `payment.amount`    | `"10.500000000"` | `10.5` |

**प्रोजेक्ट तक सीमित कुंजी अब सभी मेथड में पाबंदी लागू करती है।** पहले कुछ मेथड प्रोजेक्ट को अनदेखा करते थे। अब सूची वाले मेथड में यह फ़िल्टर है, और दूसरे प्रोजेक्ट के इनवॉइस या वॉलेट का अनुरोध `Restricted project` के साथ ठुकरा दिया जाता है। जो मेथड प्रोजेक्ट की पाबंदी नहीं निभा सकता, वह ऐसी कुंजी के लिए बंद है। ब्यौरा “कुंजी का दायरा” सेक्शन में है।

**भुगतानों की सूची अब बिना जुड़े भुगतान भी लौटाती है।** पहले `payments/list` सिर्फ़ इनवॉइस से जुड़े भुगतान लौटाता था। अब नतीजों में आपके सभी वॉलेट के भुगतान होते हैं; बिना जुड़े भुगतान में `invoice` ब्लॉक नहीं होता। यही वे भुगतान हैं, जो `invoices/bindPayment` से मैन्युअल जोड़ने के लिए चाहिए।

**इनवॉइस रद्द करना अब मना करने के कारण अलग-अलग बताता है।** पहले इनवॉइस के न होने और शर्तों के पूरे न होने, दोनों पर सामान्य `Invoice not found` आता था। अब `Invoice not found` का मतलब सिर्फ़ यह है कि इनवॉइस मौजूद नहीं है, और शर्तें पूरी न होने पर `Invoice cannot be canceled` आता है।

**बेढंगे ID अब ठुकरा दिए जाते हैं।** `invoices/list` `invoiceId`, `invoiceUid` और `projectId` की जाँच करता है; `payments/list` — `walletId` और `invoiceId` की। जो मान खरा नहीं उतरता, उस पर फ़ील्ड के नाम के साथ `Parameter is filled in incorrectly` आता है। पहले ऐसा पैरामीटर चुपचाप गिरा दिया जाता था और नतीजे बिना फ़िल्टर लौटते थे।

**अवधि की सीमाओं में अब बताया गया पूरा दिन शामिल है।** `startDate` और `endDate` `00:00:00` से `23:59:59` तक समझे जाते हैं। पहले आख़िरी दिन पूरा कट जाता था, और एक दिन की क्वेरी सिर्फ़ ठीक आधी रात को बने रिकॉर्ड लौटाती थी। `invoices/list`, `payments/list`, `statistics/invoices` और `statistics/payments` पर लागू होता है।

**बैलेंस के इतिहास में प्रोजेक्ट फ़ील्ड जुड़ा।** `billing/history` मेथड के हर ऑपरेशन में अब `projectId` फ़ील्ड है। खाते के स्तर के ऑपरेशनों — टॉप-अप और बोनस — के लिए यह `null` है।

### 4 सितंबर

**विवरण और सर्विस डेटा अब मूल रूप में लौटते हैं।** `description` और `serviceData` फ़ील्ड पहले एनकोड होकर सहेजे जाते थे, और API के जवाबों में उद्धरण चिह्न `&quot;` बनकर और छोटे का चिह्न `<` बनकर आता था। अब ठीक वही लौटता है, जो व्यापारी ने भेजा था। HTML में दिखाते समय मान को अपनी ओर से एस्केप करें।

**HTML फ़ॉर्म सिर्फ़ POST स्वीकार करते हैं।** एड्रेस बार में पैरामीटर वाले लिंक से इनवॉइस बनाना अब काम नहीं करता — पैरामीटर सिर्फ़ अनुरोध की बॉडी से पढ़े जाते हैं। अगर आप लिंक इस्तेमाल करते थे, तो उनकी जगह `method="post"` वाला फ़ॉर्म लगाएँ।

### 3 सितंबर

**Webhook सूचनाओं पर अब हस्ताक्षर होता है।** `X-Timestamp` और `X-Signature` हेडर जुड़े; हस्ताक्षर की गणना Webhook की गुप्त कुंजी पर HMAC-SHA256 से होती है। हस्ताक्षर की जाँच से आप असली सूचना को जालसाज़ी से अलग पहचान सकते हैं। तरीका और उदाहरण “Webhook हस्ताक्षर की जाँच” सेक्शन में हैं।

यह बदलाव पीछे से संगत है: अगर आप जाँच नहीं जोड़ते, तो आपका हैंडलर पहले की तरह काम करता रहता है।
