From 47b82083e801979b44a2046b47ea2f383c29db0d Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Fri, 4 Nov 2022 13:49:38 +0545 Subject: [PATCH 1/9] :lipstick: got rid of custom css and set khalti brand colors --- content/style/custom.css | 48 +++++----------------------------------- mkdocs.yml | 20 ++++++++++++++++- 2 files changed, 25 insertions(+), 43 deletions(-) diff --git a/content/style/custom.css b/content/style/custom.css index 44c119b..690edba 100644 --- a/content/style/custom.css +++ b/content/style/custom.css @@ -1,43 +1,7 @@ -[data-md-color-primary="deep-purple"] .md-header { - background-color: #4F276E !important; +:root > * { + --md-primary-fg-color: #5E338D; + --md-accent-fg-color: #FF2D79; + --md-accent-bg-color: #00FF00; + --md-footer-fg-color: #FFA439; + --md-typeset-a-color: #FFA439; } -.md-footer-nav { - background-color: #f9f9f9 !important; - color: #7E57CB; -} -.md-footer-meta { - background-color:#4F276E !important; -} - -.deprecated{ - font-weight: bold; - border:1px solid chocolate; - padding:2em; - background-color: antiquewhite; - margin-bottom: 5em; -} - -.important{ - font-weight: bold; - border:1px solid navy; - padding:2em; - background-color: rgba(8, 127, 212, 0.132); - margin-bottom: 5em; -} - -.mg-top-10{ - margin-top: 10em; -} - -.mg-top-5{ - margin-top: 5em; -} - -.mg-top-2{ - margin-top: 2em; -} - -.md-sidebar a.md-nav__link:nth-child(3){ - color: deeppink !important; - font-weight: bold; -} \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index eccba9a..cdf7309 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -34,8 +34,18 @@ nav: theme: name: material custom_dir: overrides + features: + - content.code.annotate palette: - primary: deep-purple + - scheme: slate + toggle: + icon: material/weather-sunny + name: Switch to light mode + - scheme: default + toggle: + icon: material/weather-night + name: Switch to dark mode + favicon: "img/favicon.png" icon: logo: "img/khalti_logo.png" @@ -62,5 +72,13 @@ extra: - icon: "fontawesome/brands/instagram" link: "https://www.instagram.com/khaltiofficial/" markdown_extensions: + - admonition - toc: permalink: true + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true From 7e394aa495b3234d149fa8691ecfc5a617bea99e Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Fri, 4 Nov 2022 13:50:25 +0545 Subject: [PATCH 2/9] :lipstick: used tabbed code blocks --- content/api/transaction.md | 91 ++++++++--------- content/api/transaction_details.md | 90 ++++++++--------- content/api/transaction_status.md | 72 +++++++------- content/api/verification.md | 152 +++++++++++++++-------------- 4 files changed, 205 insertions(+), 200 deletions(-) diff --git a/content/api/transaction.md b/content/api/transaction.md index f676843..d115b6b 100644 --- a/content/api/transaction.md +++ b/content/api/transaction.md @@ -9,7 +9,7 @@ Replace `` with test or live secret key as per required. **Response** is paginated and in the following format: -```python +```json { "total_pages": 1, "total_records": 2, @@ -82,60 +82,61 @@ Replace `` with test or live secret key as per required. ## API Request Examples -### CURL +=== "cURL" -```curl -curl https://khalti.com/api/v2/merchant-transaction/ -H "Authorization:Key -``` + ``` bash + curl https://khalti.com/api/v2/merchant-transaction/ \ + -H "Authorization:Key + ``` -### PHP -```php -$url = "https://khalti.com/api/v2/merchant-transaction/"; +=== "php" -# Make the call using API. -$ch = curl_init(); -curl_setopt($ch, CURLOPT_URL, $url); -curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + ``` php + ` with test or live secret key as per required. **Response** is in the following format: -```python +```json { "idx": "xeR2tuRqEvBLmeJcZzMb5U", "type": { @@ -81,60 +81,60 @@ Replace `` with test or live secret key as per required. ## API Request Examples -###CURL +=== "cURL" -```curl -curl https://khalti.com/api/v2/merchant-transaction// -H "Authorization:Key -``` - -### PHP -```php - -$url = "https://khalti.com/api/v2/merchant-transaction//"; + ``` bash + curl https://khalti.com/api/v2/merchant-transaction// \ + -H "Authorization:Key + ``` -# Make the call using API. -$ch = curl_init(); -curl_setopt($ch, CURLOPT_URL, $url); -curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); +=== "php" -$headers = ['Authorization: Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b']; -curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + ``` php + /"; -// Response -$response = curl_exec($ch); -$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); -curl_close($ch); + # Make the call using API. + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); -``` + $headers = ['Authorization: Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b']; + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); -### Python + // Response + $response = curl_exec($ch); + $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + ``` -```python -import requests - -url = "https://khalti.com/api/v2/merchant-transaction//" -headers = { - "Authorization": "Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b" -} +=== "Python" -response = requests.get(url, headers = headers) -``` + ``` python + import requests + url = "https://khalti.com/api/v2/merchant-transaction//" + headers = { + "Authorization": "Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b" + } -### Ruby + response = requests.get(url, headers = headers) + ``` -```ruby -require 'uri' -require 'net/http' +=== "Ruby" -headers = { - Authorization: "Key live_secret_key_fc1207298be544b99fa3ad41c7d7b324" -} -uri = URI.parse("https://khalti.com/api/v2/merchant-transaction//") -https = Net::HTTP.new(uri.host, uri.port) -https.use_ssl = true -request = Net::HTTP::Get.new(uri.request_uri, headers) -response = https.request(request) + ``` ruby + require 'uri' + require 'net/http' -puts response.body -``` + headers = { + Authorization: "Key live_secret_key_fc1207298be544b99fa3ad41c7d7b324" + } + uri = URI.parse("https://khalti.com/api/v2/merchant-transaction//") + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + request = Net::HTTP::Get.new(uri.request_uri, headers) + response = https.request(request) + + puts response.body + ``` diff --git a/content/api/transaction_status.md b/content/api/transaction_status.md index 8c0daad..1dc3396 100644 --- a/content/api/transaction_status.md +++ b/content/api/transaction_status.md @@ -24,7 +24,7 @@ Once you've made a request as specified above, Khalti server will return you a r Success response consists of the `Complete` state. #### Completed State -``` +```json { "status": true, "detail": "Transaction complete.", @@ -34,10 +34,10 @@ Success response consists of the `Complete` state. ### Error Response -#### 1. Trasaction Not Found +#### 1. Transaction Not Found An error occurs, if wrong token/idx or wrong amount is passed in the parameter. It consist of the detail of error. -``` +```json { "status": false, "state": "Error", @@ -48,7 +48,7 @@ An error occurs, if wrong token/idx or wrong amount is passed in the parameter. #### 2. Failed State A transaction could be failed due to the possibility of 'confirmation_code' exploitation. -``` +```json { "status": false, "detail": "Transaction failed.", @@ -62,7 +62,7 @@ A transaction could be failed due to the possibility of 'confirmation_code' expl Transactions are initiated after mobile number and khalti pin along with other transaction details are provided. -``` +```json { "status": true, "detail": "Transaciton initiated.", @@ -73,7 +73,7 @@ Transactions are initiated after mobile number and khalti pin along with other t #### 2. Confirmed State A transaction is confirmed after transaction details (transaction token, confirmation_code and 3rd party transaction_pin) are provided by the consumer. -``` +```json { "status": true, "detail": "Transaciton not verified.", @@ -82,7 +82,7 @@ A transaction is confirmed after transaction details (transaction token, confirm ``` #### 3. Refunded State -``` +```json { "status": false, "detail": "Transaciton refunded.", @@ -91,7 +91,7 @@ A transaction is confirmed after transaction details (transaction token, confirm ``` #### 4. Partially Refunded State -``` +```json { "status": false, "detail": "Transaction partially refunded.", @@ -102,44 +102,42 @@ A transaction is confirmed after transaction details (transaction token, confirm ## Example Requests Assuming the token/idx that we received is `XPPrDcwtHUg4UQbWEnxRzA`. -### Python - -```python -import requests +=== "Python" -url = "https://khalti.com/api/v2/payment/status/" -params = { - "token": "XPPrDcwtHUg4UQbWEnxRzA", - "amount": 1000 -} -headers = { - "Authorization": "Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b" -} + ``` python + import requests -response = requests.get(url, params, headers = headers) -``` + url = "https://khalti.com/api/v2/payment/status/" + params = { + "token": "XPPrDcwtHUg4UQbWEnxRzA", + "amount": 1000 + } + headers = { + "Authorization": "Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b" + } -### Node + response = requests.get(url, params, headers = headers) + ``` -Install `axios` by running `yarn add axios`. +=== "Node.js" -```nodejs -const axios = require('axios'); + ``` javascript + const axios = require('axios'); -let data = { - "token": "XPPrDcwtHUg4UQbWEnxRzA", - "amount": 1000 -}; + let data = { + "token": "XPPrDcwtHUg4UQbWEnxRzA", + "amount": 1000 + }; -let config = { - headers: {'Authorization': 'Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b'} -}; + let config = { + headers: {'Authorization': 'Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b'} + }; -axios.get("https://khalti.com/api/v2/payment/status/", data, config) + axios.get("https://khalti.com/api/v2/payment/status/", data, config) .then(response => { - console.log(response.data); + console.log(response.data); }) .catch(error => { - console.log(error); + console.log(error); }); -``` + ``` diff --git a/content/api/verification.md b/content/api/verification.md index 3134576..10075ac 100644 --- a/content/api/verification.md +++ b/content/api/verification.md @@ -34,10 +34,14 @@ expected by Khalti server is as follows. - `token`: Token given by Khalti after payment confirmation. - `amount`: Amount (in paisa) with which payment was initiated. -**(Important !! Cross check the amount from client side to amount from server.)** +!!! important -**(Disclaimer: If any negative consequences occur due to incomplete API integration, Khalti won’t be liable for any such losses.)** + Cross check the amount from client side to amount from server. +!!! warning "Disclaimer" + + If any negative consequences occur due to incomplete API integration, + Khalti won’t be liable for any such losses. ## Verification response Once you've made a request as specified above, Khalti server will @@ -84,98 +88,100 @@ return you a response in the following format. ## Examples Assuming the token that we received is `QUao9cqFzxPgvWJNi9aKac`. -### CURL +=== "cURL" -```curl -curl https://khalti.com/api/v2/payment/verify/ \ - -H "Authorization:Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b" \ - -d amount=1000 \ - -d token=QUao9cqFzxPgvWJNi9aKac -``` + ``` bash + curl https://khalti.com/api/v2/payment/verify/ \ + -H "Authorization:Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b" \ + -d amount=1000 \ + -d token=QUao9cqFzxPgvWJNi9aKac + ``` -### PHP -```php -$args = http_build_query(array( - 'token' => 'QUao9cqFzxPgvWJNi9aKac', - 'amount' => 1000 -)); +=== "php" -$url = "https://khalti.com/api/v2/payment/verify/"; + ``` php + 'QUao9cqFzxPgvWJNi9aKac', + 'amount' => 1000 + )); -# Make the call using API. -$ch = curl_init(); -curl_setopt($ch, CURLOPT_URL, $url); -curl_setopt($ch, CURLOPT_POST, 1); -curl_setopt($ch, CURLOPT_POSTFIELDS,$args); -curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $url = "https://khalti.com/api/v2/payment/verify/"; -$headers = ['Authorization: Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b']; -curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + # Make the call using API. + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS,$args); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); -// Response -$response = curl_exec($ch); -$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); -curl_close($ch); + $headers = ['Authorization: Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b']; + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); -``` + // Response + $response = curl_exec($ch); + $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + ``` -### Python +=== "Python" -```python -import requests + ``` python + #include -url = "https://khalti.com/api/v2/payment/verify/" -payload = { - "token": "QUao9cqFzxPgvWJNi9aKac", - "amount": 1000 -} -headers = { - "Authorization": "Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b" -} + url = "https://khalti.com/api/v2/payment/verify/" -response = requests.post(url, payload, headers = headers) -``` + payload = { + 'token': 'QUao9cqFzxPgvWJNi9aKac', + 'amount': 1000 + } -### Ruby + headers = { + 'Authorization': 'Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b' + } -```ruby -require 'uri' -require 'net/http' + response = requests.request("POST", url, headers=headers, data=payload) + ``` -headers = { - Authorization: 'Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b' -} -uri = URI.parse('https://khalti.com/api/v2/payment/verify/') -https = Net::HTTP.new(uri.host, uri.port) -https.use_ssl = true -request = Net::HTTP::Post.new(uri.request_uri, headers) -request.set_form_data('token' => 'QUao9cqFzxPgvWJNi9aKac', 'amount' => 1000) -response = https.request(request) - -puts response.body -``` +=== "Ruby" + + ``` ruby + require 'uri' + require 'net/http' -### Node + headers = { + Authorization: 'Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b' + } -Install `axios` by running `yarn install axios`. + uri = URI.parse('https://khalti.com/api/v2/payment/verify/') + https = Net::HTTP.new(uri.host, uri.port) + https.use_ssl = true + request = Net::HTTP::Post.new(uri.request_uri, headers) + request.set_form_data('token' => 'QUao9cqFzxPgvWJNi9aKac', 'amount' => 1000) + response = https.request(request) -```nodejs -const axios = require('axios'); + puts response.body + ``` -let data = { - "token": "QUao9cqFzxPgvWJNi9aKac", - "amount": 1000 -}; +=== "Node.js" -let config = { - headers: {'Authorization': 'Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b'} -}; + ``` javascript + const axios = require('axios'); -axios.post("https://khalti.com/api/v2/payment/verify/", data, config) + let data = { + "token": "QUao9cqFzxPgvWJNi9aKac", + "amount": 1000 + }; + + let config = { + headers: {'Authorization': 'Key test_secret_key_f59e8b7d18b4499ca40f68195a846e9b'} + }; + + axios.post("https://khalti.com/api/v2/payment/verify/", data, config) .then(response => { - console.log(response.data); + console.log(response.data); }) .catch(error => { - console.log(error); + console.log(error); }); -``` + ``` From 871815ef372adb11a8043b84555dad87e94ff3e8 Mon Sep 17 00:00:00 2001 From: sarbagyastha Date: Fri, 4 Nov 2022 13:51:00 +0545 Subject: [PATCH 3/9] :lipstick: used admonitions instead of css overrides --- content/checkout/web.md | 11 +- content/getting-started.md | 7 +- content/khalti-epayment.md | 273 +++++++++++++++++++++---------------- 3 files changed, 162 insertions(+), 129 deletions(-) diff --git a/content/checkout/web.md b/content/checkout/web.md index dec2cad..465608d 100644 --- a/content/checkout/web.md +++ b/content/checkout/web.md @@ -1,13 +1,12 @@ # Web SDK (Deprecated) -
-This version of Web SDK has been deprecated and replaced by e-Payment (checkout) version. -
-Please refer to checkout/khalti-epayment for the latest version -
- [![npm](https://img.shields.io/badge/npm-v2.2.0-blue.svg)](https://www.npmjs.com/package/khalti-checkout-web) +!!! warning "This version of Web SDK has been deprecated and replaced by e-Payment (checkout) version." + + Please refer to ePayment Checkout for the latest version. + + This documentation details the process of Khalti Web/JavaScript SDK integration in your website/app. We also have SDKs for Android and iOS. diff --git a/content/getting-started.md b/content/getting-started.md index 5577082..84f115c 100644 --- a/content/getting-started.md +++ b/content/getting-started.md @@ -28,9 +28,10 @@ Please follow links below to create a merchant and a consumer accounts if you ha - [Create a merchant account](https://khalti.com/join/merchant/) - [Create a consumer account](https://khalti.com/join/) -
-For the latest version of Khalti Payment Gateway on web, Please visit ePayment Checkout -
+!!! info + + For the latest version of Khalti Payment Gateway on web, + Please visit ePayment Checkout ## 2. Understand Khalti payment process diff --git a/content/khalti-epayment.md b/content/khalti-epayment.md index c83e504..60a9395 100644 --- a/content/khalti-epayment.md +++ b/content/khalti-epayment.md @@ -3,15 +3,8 @@ This documentation details the process of implementing the latest e-Payment Checkout platform released by Khalti.The latest version is accessible through [pay.khalti.com](https://pay.khalti.com) - - ## How it works? - - User visits the merchant's website to make some purchase - A unique `purchase_order_id` is generated at merchant's system - Payment request is made to Khalti providing the `purchase_order_id`, `amount` in paisa and `return_url` @@ -24,27 +17,46 @@ To get the feel of how Khalti checkout looks click the button below. There is no special installation plugin or SDK required for this provided you are able to make a POST request from your web application. However, we shall come up with handy plugins in coming days. -> A merchant account is required if you haven't created at. +!!! tip + + A merchant account is required if you haven't created at. + +!!! info "Access Information" + + > **For Sandbox Access** -> __For sandbox access__
Signup from [https://a.khalti.com/join/merchant/](https://a.khalti.com/join/merchant/) as a merchant + Signup from [https://a.khalti.com/join/merchant/](https://a.khalti.com/join/merchant/) as a merchant. -> __For Production access__
Please visit [https://admin.khalti.com](https://admin.khalti.com) + > **For Production Access** + + Please visit [https://admin.khalti.com](https://admin.khalti.com) ## API Authorization HTTP Authorization for api requests is done using Auth Keys. Auth Key must be passed in the header for authorization in the following format -``` +```json { "Authorization": "Key " } ``` -> PS : Use `live_secret_key` from __a.khalti.com__ during sandbox testing and use `live_secret_key` from __khalti.com__ for production environments +!!! tip + + Use `live_secret_key` from __a.khalti.com__ during sandbox testing and use `live_secret_key` from __khalti.com__ for production environments. + ## API Endpoints -> __Live__
[https://khalti.com/api/v2/](https://khalti.com/api/v2/) -> __Sandbox__
[https://a.khalti.com/api/v2/](https://a.khalti.com/api/v2/) +!!! info "API Endpoints" + + > **Sandbox** + + [https://a.khalti.com/api/v2/](https://a.khalti.com/api/v2/) + + > **Production** + + [https://khalti.com/api/v2/](https://khalti.com/api/v2/) + ## Initiating a Payment request Every payment request should be first initiated from the merchant as a server side `POST` request. Upon success, a unique request identifier is provided called `pidx` that should be used for any future references @@ -66,7 +78,7 @@ Every payment request should be first initiated from the merchant as a server si | product_details | No | No of set is unlimited ### Sample Request Payload -``` +```json { "return_url": "https://example.com/payment/", "website_url": "https://example.com/", @@ -100,105 +112,117 @@ Every payment request should be first initiated from the merchant as a server si } ``` -### Success Response -``` -{ - "pidx": "S8QJg2VALZGTJRkKqVxjqB", - "payment_url": "https://test-pay.khalti.com/?pidx=S8QJg2VALZGTJRkKqVxjqB/" -} -``` +!!! success "Success Response" + ```json + { + "pidx": "S8QJg2VALZGTJRkKqVxjqB", + "payment_url": "https://test-pay.khalti.com/?pidx=S8QJg2VALZGTJRkKqVxjqB/" + } + ``` After getting the success response, the user should be redirected to the `payment_url` obtained in the success response. ### Error Responses -__return_url is blank__ -``` -{ - "return_url": [ - "This field may not be blank." - ], - "error_key": "validation_error" -} -``` - -__return_url is invalid__ -```` -{ - "return_url": [ - "Enter a valid URL." - ], - "error_key": "validation_error" -} -```` -__website_url is blank__ -``` -{ - "website_url": [ - "This field may not be blank." - ], - "error_key": "validation_error" -} -``` - -__website_url is invalid)__ -``` -{ - "website_url": [ - "Enter a valid URL." - ], - "error_key": "validation_error" -} -``` - -__Amount is less than 10__ -``` -{ - "amount": [ - "Amount should be greater than Rs. 1, that is 100 paisa." - ], - "error_key": "validation_error" -} -``` -__Amount is invalid__ -``` -{ - "amount": [ - "A valid integer is required." - ], - "error_key": "validation_error" -} -``` - -__purchase_order_id is blank__ -``` -{ - "purchase_order_id": [ - "This field may not be blank." - ], - "error_key": "validation_error" -} -``` - -__purchase_order_name is blank__ -``` -{ - "purchase_order_name": [ - "This field may not be blank." - ], - "error_key": "validation_error" -} -``` +!!! failure "return_url is blank" + + ``` json + { + "return_url": [ + "This field may not be blank." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "return_url is invalid" + + ``` json + { + "return_url": [ + "Enter a valid URL." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "website_url is blank" + + ``` json + { + "website_url": [ + "This field may not be blank." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "website_url is invalid" + + ``` json + { + "website_url": [ + "Enter a valid URL." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "Amount is less than 10" + + ``` json + { + "amount": [ + "Amount should be greater than Rs. 1, that is 100 paisa." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "Amount is invalid" + + ``` json + { + "amount": [ + "A valid integer is required." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "purchase_order_id is blank" + + ``` json + { + "purchase_order_id": [ + "This field may not be blank." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "purchase_order_name is blank" + + ``` json + { + "purchase_order_name": [ + "This field may not be blank." + ], + "error_key": "validation_error" + } + ``` + +!!! failure "Amount breakdown doesn't total to the amount passed" + + ``` json + { + "amount": [ + "Amount Breakdown mismatch." + ], + "error_key": "validation_error" + } + ``` -__Amount breakdown doesn't total to the amount passed__ -``` -{ - "amount": [ - "Amount Breakdown mismatch." - ], - "error_key": "validation_error" -} -```