pinelabs-python 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. pinelabs/__init__.py +1679 -0
  2. pinelabs/_default_clients.py +30 -0
  3. pinelabs/affordability_suite/__init__.py +325 -0
  4. pinelabs/affordability_suite/client.py +1007 -0
  5. pinelabs/affordability_suite/raw_client.py +1095 -0
  6. pinelabs/affordability_suite/types/__init__.py +477 -0
  7. pinelabs/affordability_suite/types/downpayment_details_request_issuer.py +26 -0
  8. pinelabs/affordability_suite/types/imei_validation_request_request_type.py +5 -0
  9. pinelabs/affordability_suite/types/offer_discovery_cardless_request_payment_option.py +29 -0
  10. pinelabs/affordability_suite/types/offer_discovery_cardless_request_payment_option_cardless_details.py +31 -0
  11. pinelabs/affordability_suite/types/offer_discovery_request_cart_coupon_discount_amount.py +31 -0
  12. pinelabs/affordability_suite/types/offer_discovery_request_customer_details.py +26 -0
  13. pinelabs/affordability_suite/types/offer_discovery_request_downpayment_details.py +31 -0
  14. pinelabs/affordability_suite/types/offer_discovery_request_downpayment_details_downpayment_amount.py +31 -0
  15. pinelabs/affordability_suite/types/offer_discovery_request_issuer.py +42 -0
  16. pinelabs/affordability_suite/types/offer_discovery_request_issuer_issuer_type.py +10 -0
  17. pinelabs/affordability_suite/types/offer_discovery_request_order_amount.py +31 -0
  18. pinelabs/affordability_suite/types/offer_discovery_request_payment_options.py +37 -0
  19. pinelabs/affordability_suite/types/offer_discovery_request_payment_options_card_details.py +26 -0
  20. pinelabs/affordability_suite/types/offer_discovery_request_payment_options_card_token_details.py +31 -0
  21. pinelabs/affordability_suite/types/offer_discovery_request_product_details_item.py +40 -0
  22. pinelabs/affordability_suite/types/offer_discovery_request_product_details_item_product_amount.py +31 -0
  23. pinelabs/affordability_suite/types/offer_discovery_request_product_details_item_product_coupon_discount_amount.py +31 -0
  24. pinelabs/affordability_suite/types/offer_validation_request_customer_details.py +26 -0
  25. pinelabs/affordability_suite/types/offer_validation_request_offer_data.py +27 -0
  26. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details.py +52 -0
  27. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure.py +146 -0
  28. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_auth_amount.py +20 -0
  29. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_cart_coupon_discount_amount.py +20 -0
  30. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown.py +60 -0
  31. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_additional_fee_amount.py +20 -0
  32. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_applicable_fee_amount.py +20 -0
  33. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_amount.py +20 -0
  34. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_calculated_on_amount.py +20 -0
  35. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_maximum_fee_amount.py +20 -0
  36. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_subvented_fee_amount.py +20 -0
  37. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_convenience_fee_breakdown_tax_amount.py +20 -0
  38. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item.py +119 -0
  39. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_after_downpayment_reduced_product_amount.py +22 -0
  40. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_cart_coupon_discount_product_share.py +20 -0
  41. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount.py +48 -0
  42. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup.py +36 -0
  43. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_brand.py +24 -0
  44. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_brand_amount.py +20 -0
  45. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_dealer.py +24 -0
  46. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_dealer_amount.py +20 -0
  47. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_issuer.py +24 -0
  48. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_issuer_amount.py +20 -0
  49. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_merchant.py +24 -0
  50. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_breakup_merchant_amount.py +20 -0
  51. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_max_amount.py +20 -0
  52. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_discount_min_amount.py +20 -0
  53. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_downpayment_amount.py +20 -0
  54. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_interest_amount.py +20 -0
  55. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_product_amount.py +31 -0
  56. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_product_coupon_discount_amount.py +24 -0
  57. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_product_offer_parameters_item.py +32 -0
  58. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention.py +40 -0
  59. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_amount.py +20 -0
  60. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup.py +36 -0
  61. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_brand.py +24 -0
  62. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_brand_amount.py +20 -0
  63. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer.py +24 -0
  64. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer_amount.py +20 -0
  65. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer.py +24 -0
  66. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer_amount.py +20 -0
  67. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant.py +24 -0
  68. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant_amount.py +20 -0
  69. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_max_amount.py +20 -0
  70. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_details_item_subvention_min_amount.py +20 -0
  71. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount.py +40 -0
  72. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup.py +34 -0
  73. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_brand.py +22 -0
  74. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_brand_amount.py +20 -0
  75. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_dealer.py +22 -0
  76. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_dealer_amount.py +20 -0
  77. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_issuer.py +22 -0
  78. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_issuer_amount.py +20 -0
  79. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_merchant.py +22 -0
  80. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_breakup_merchant_amount.py +20 -0
  81. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_max_amount.py +20 -0
  82. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_discount_min_amount.py +20 -0
  83. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_downpayment_details.py +28 -0
  84. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_downpayment_details_downpayment_amount.py +20 -0
  85. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_interest_amount.py +20 -0
  86. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_loan_amount.py +20 -0
  87. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_monthly_emi_amount.py +20 -0
  88. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_net_payment_amount.py +20 -0
  89. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_processing_fee_amount.py +20 -0
  90. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_processing_fee_details.py +22 -0
  91. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_processing_fee_details_amount.py +20 -0
  92. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_split_emi_amount.py +20 -0
  93. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_coupon_discount.py +20 -0
  94. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_discount_amount.py +20 -0
  95. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_emi_amount.py +20 -0
  96. pinelabs/affordability_suite/types/offer_validation_request_offer_data_offer_details_tenure_total_subvention_amount.py +20 -0
  97. pinelabs/affordability_suite/types/offer_validation_request_order_amount.py +31 -0
  98. pinelabs/affordability_suite/types/offer_validation_request_payment_amount.py +31 -0
  99. pinelabs/affordability_suite/types/offer_validation_request_payment_option.py +43 -0
  100. pinelabs/affordability_suite/types/offer_validation_request_payment_option_card_details.py +31 -0
  101. pinelabs/affordability_suite/types/offer_validation_request_payment_option_card_token_details.py +46 -0
  102. pinelabs/affordability_suite/types/offer_validation_request_payment_option_cardless_details.py +31 -0
  103. pinelabs/apple_pay/__init__.py +49 -0
  104. pinelabs/apple_pay/client.py +190 -0
  105. pinelabs/apple_pay/raw_client.py +283 -0
  106. pinelabs/apple_pay/types/__init__.py +53 -0
  107. pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details.py +62 -0
  108. pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details_card_meta_data.py +37 -0
  109. pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details_card_meta_data_card_type.py +7 -0
  110. pinelabs/apple_pay/types/authorize_payment_request_decrypted_card_details_card_meta_data_network_name.py +7 -0
  111. pinelabs/authentication/__init__.py +4 -0
  112. pinelabs/authentication/client.py +155 -0
  113. pinelabs/authentication/raw_client.py +226 -0
  114. pinelabs/bnpl/__init__.py +46 -0
  115. pinelabs/bnpl/client.py +200 -0
  116. pinelabs/bnpl/raw_client.py +273 -0
  117. pinelabs/bnpl/types/__init__.py +46 -0
  118. pinelabs/bnpl/types/bnpl_check_eligibility_request_device_info.py +56 -0
  119. pinelabs/bnpl/types/bnpl_check_eligibility_request_device_info_operating_system.py +7 -0
  120. pinelabs/bnpl/types/bnpl_check_eligibility_request_pay_code.py +5 -0
  121. pinelabs/card_payments/__init__.py +4 -0
  122. pinelabs/card_payments/client.py +547 -0
  123. pinelabs/card_payments/raw_client.py +1085 -0
  124. pinelabs/checkout/__init__.py +37 -0
  125. pinelabs/checkout/client.py +225 -0
  126. pinelabs/checkout/raw_client.py +318 -0
  127. pinelabs/checkout/types/__init__.py +40 -0
  128. pinelabs/checkout/types/generate_checkout_link_request_allowed_payment_methods_item.py +7 -0
  129. pinelabs/checkout/types/generate_checkout_link_request_integration_mode.py +5 -0
  130. pinelabs/client.py +612 -0
  131. pinelabs/convenience_fee/__init__.py +4 -0
  132. pinelabs/convenience_fee/client.py +156 -0
  133. pinelabs/convenience_fee/raw_client.py +247 -0
  134. pinelabs/core/__init__.py +127 -0
  135. pinelabs/core/api_error.py +23 -0
  136. pinelabs/core/client_wrapper.py +132 -0
  137. pinelabs/core/datetime_utils.py +70 -0
  138. pinelabs/core/file.py +67 -0
  139. pinelabs/core/force_multipart.py +18 -0
  140. pinelabs/core/http_client.py +840 -0
  141. pinelabs/core/http_response.py +59 -0
  142. pinelabs/core/http_sse/__init__.py +42 -0
  143. pinelabs/core/http_sse/_api.py +112 -0
  144. pinelabs/core/http_sse/_decoders.py +61 -0
  145. pinelabs/core/http_sse/_exceptions.py +7 -0
  146. pinelabs/core/http_sse/_models.py +17 -0
  147. pinelabs/core/jsonable_encoder.py +120 -0
  148. pinelabs/core/logging.py +107 -0
  149. pinelabs/core/parse_error.py +36 -0
  150. pinelabs/core/pydantic_utilities.py +634 -0
  151. pinelabs/core/query_encoder.py +58 -0
  152. pinelabs/core/remove_none_from_dict.py +11 -0
  153. pinelabs/core/request_options.py +35 -0
  154. pinelabs/core/serialization.py +276 -0
  155. pinelabs/customers/__init__.py +34 -0
  156. pinelabs/customers/client.py +590 -0
  157. pinelabs/customers/raw_client.py +1061 -0
  158. pinelabs/customers/types/__init__.py +34 -0
  159. pinelabs/customers/types/update_customer_request_status.py +5 -0
  160. pinelabs/e_challans/__init__.py +55 -0
  161. pinelabs/e_challans/client.py +323 -0
  162. pinelabs/e_challans/raw_client.py +386 -0
  163. pinelabs/e_challans/types/__init__.py +63 -0
  164. pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown.py +67 -0
  165. pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_additional_fee_amount.py +32 -0
  166. pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_applicable_fee_amount.py +32 -0
  167. pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_fee_amount.py +32 -0
  168. pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_maximum_fee_amount.py +32 -0
  169. pinelabs/e_challans/types/create_challan_request_convenience_fee_breakdown_tax_amount.py +32 -0
  170. pinelabs/environment.py +7 -0
  171. pinelabs/errors/__init__.py +62 -0
  172. pinelabs/errors/bad_request_error.py +10 -0
  173. pinelabs/errors/conflict_error.py +11 -0
  174. pinelabs/errors/forbidden_error.py +11 -0
  175. pinelabs/errors/internal_server_error.py +11 -0
  176. pinelabs/errors/method_not_allowed_error.py +11 -0
  177. pinelabs/errors/not_found_error.py +11 -0
  178. pinelabs/errors/service_unavailable_error.py +11 -0
  179. pinelabs/errors/unauthorized_error.py +11 -0
  180. pinelabs/errors/unprocessable_entity_error.py +10 -0
  181. pinelabs/international_payments/__init__.py +4 -0
  182. pinelabs/international_payments/client.py +187 -0
  183. pinelabs/international_payments/raw_client.py +201 -0
  184. pinelabs/orders/__init__.py +37 -0
  185. pinelabs/orders/client.py +613 -0
  186. pinelabs/orders/raw_client.py +1132 -0
  187. pinelabs/orders/types/__init__.py +38 -0
  188. pinelabs/orders/types/create_order_request_allowed_payment_methods_item.py +8 -0
  189. pinelabs/orders/types/create_order_request_purchase_details.py +28 -0
  190. pinelabs/pay_by_points/__init__.py +49 -0
  191. pinelabs/pay_by_points/client.py +177 -0
  192. pinelabs/pay_by_points/raw_client.py +246 -0
  193. pinelabs/pay_by_points/types/__init__.py +49 -0
  194. pinelabs/pay_by_points/types/check_point_balance_request_order_details.py +27 -0
  195. pinelabs/pay_by_points/types/check_point_balance_request_order_details_order_amount.py +31 -0
  196. pinelabs/pay_by_points/types/check_point_balance_request_payment_option.py +26 -0
  197. pinelabs/pay_by_points/types/check_point_balance_request_payment_option_points_card_details.py +32 -0
  198. pinelabs/payment_links/__init__.py +34 -0
  199. pinelabs/payment_links/client.py +642 -0
  200. pinelabs/payment_links/raw_client.py +797 -0
  201. pinelabs/payment_links/types/__init__.py +38 -0
  202. pinelabs/payment_links/types/create_payment_link_request_allowed_payment_methods_item.py +7 -0
  203. pinelabs/payouts/__init__.py +38 -0
  204. pinelabs/payouts/client.py +810 -0
  205. pinelabs/payouts/raw_client.py +1427 -0
  206. pinelabs/payouts/types/__init__.py +40 -0
  207. pinelabs/payouts/types/create_payout_request_mode.py +5 -0
  208. pinelabs/payouts/types/list_payouts_request_mode.py +5 -0
  209. pinelabs/payouts/types/list_payouts_request_status.py +7 -0
  210. pinelabs/refunds/__init__.py +52 -0
  211. pinelabs/refunds/client.py +211 -0
  212. pinelabs/refunds/raw_client.py +324 -0
  213. pinelabs/refunds/types/__init__.py +52 -0
  214. pinelabs/refunds/types/create_refund_request_order_amount.py +31 -0
  215. pinelabs/refunds/types/create_refund_request_products_item.py +27 -0
  216. pinelabs/refunds/types/create_refund_request_split_info.py +29 -0
  217. pinelabs/refunds/types/create_refund_request_split_info_split_details_item.py +32 -0
  218. pinelabs/refunds/types/create_refund_request_split_info_split_details_item_amount.py +20 -0
  219. pinelabs/settlements/__init__.py +4 -0
  220. pinelabs/settlements/client.py +283 -0
  221. pinelabs/settlements/raw_client.py +421 -0
  222. pinelabs/split_settlements/__init__.py +34 -0
  223. pinelabs/split_settlements/client.py +254 -0
  224. pinelabs/split_settlements/raw_client.py +414 -0
  225. pinelabs/split_settlements/types/__init__.py +36 -0
  226. pinelabs/split_settlements/types/release_settlement_request_release_amount.py +31 -0
  227. pinelabs/subscriptions_plans/__init__.py +37 -0
  228. pinelabs/subscriptions_plans/client.py +872 -0
  229. pinelabs/subscriptions_plans/raw_client.py +1111 -0
  230. pinelabs/subscriptions_plans/types/__init__.py +38 -0
  231. pinelabs/subscriptions_plans/types/create_plan_request_frequency.py +10 -0
  232. pinelabs/subscriptions_plans/types/list_plans_request_amount_range.py +5 -0
  233. pinelabs/subscriptions_presentations/__init__.py +4 -0
  234. pinelabs/subscriptions_presentations/client.py +886 -0
  235. pinelabs/subscriptions_presentations/raw_client.py +1168 -0
  236. pinelabs/subscriptions_subscriptions/__init__.py +46 -0
  237. pinelabs/subscriptions_subscriptions/client.py +1014 -0
  238. pinelabs/subscriptions_subscriptions/raw_client.py +1281 -0
  239. pinelabs/subscriptions_subscriptions/types/__init__.py +46 -0
  240. pinelabs/subscriptions_subscriptions/types/create_subscription_request_allowed_payment_methods_item.py +7 -0
  241. pinelabs/subscriptions_subscriptions/types/create_subscription_request_integration_mode.py +5 -0
  242. pinelabs/subscriptions_subscriptions/types/list_subscriptions_request_amount_range.py +5 -0
  243. pinelabs/tokenization/__init__.py +37 -0
  244. pinelabs/tokenization/client.py +809 -0
  245. pinelabs/tokenization/raw_client.py +1643 -0
  246. pinelabs/tokenization/types/__init__.py +38 -0
  247. pinelabs/tokenization/types/generate_card_token_request_payment_method.py +5 -0
  248. pinelabs/tokenization/types/get_service_provider_token_response.py +8 -0
  249. pinelabs/types/__init__.py +1320 -0
  250. pinelabs/types/acquirer_data.py +41 -0
  251. pinelabs/types/address.py +72 -0
  252. pinelabs/types/address_address_category.py +5 -0
  253. pinelabs/types/amount.py +31 -0
  254. pinelabs/types/authorize_payment_response.py +24 -0
  255. pinelabs/types/authorize_payment_response_data.py +45 -0
  256. pinelabs/types/authorize_payment_response_data_integration_mode.py +5 -0
  257. pinelabs/types/authorize_payment_response_data_order_amount.py +20 -0
  258. pinelabs/types/authorize_payment_response_data_payments_item.py +41 -0
  259. pinelabs/types/authorize_payment_response_data_payments_item_acquirer_data.py +23 -0
  260. pinelabs/types/authorize_payment_response_data_payments_item_payment_amount.py +20 -0
  261. pinelabs/types/authorize_payment_response_data_payments_item_payment_method.py +7 -0
  262. pinelabs/types/authorize_payment_response_data_payments_item_payment_option.py +22 -0
  263. pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data.py +25 -0
  264. pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data_wallet_card_data.py +38 -0
  265. pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data_wallet_card_data_card_type.py +7 -0
  266. pinelabs/types/authorize_payment_response_data_payments_item_payment_option_wallet_data_wallet_card_data_token_txn_type.py +7 -0
  267. pinelabs/types/authorize_payment_response_data_payments_item_status.py +7 -0
  268. pinelabs/types/authorize_payment_response_data_purchase_details.py +24 -0
  269. pinelabs/types/authorize_payment_response_data_purchase_details_customer.py +27 -0
  270. pinelabs/types/authorize_payment_response_data_status.py +18 -0
  271. pinelabs/types/authorize_payment_response_data_type.py +5 -0
  272. pinelabs/types/bank_account.py +36 -0
  273. pinelabs/types/bnpl_check_eligibility_response.py +32 -0
  274. pinelabs/types/bnpl_check_eligibility_response_metadata.py +36 -0
  275. pinelabs/types/bnpl_check_eligibility_response_metadata_installments_item.py +33 -0
  276. pinelabs/types/bnpl_resend_otp_response.py +37 -0
  277. pinelabs/types/bnpl_resend_otp_response_meta_data.py +26 -0
  278. pinelabs/types/bnpl_submit_otp_response.py +26 -0
  279. pinelabs/types/calculate_convenience_fee_response.py +27 -0
  280. pinelabs/types/calculate_convenience_fee_response_data_item.py +50 -0
  281. pinelabs/types/calculate_convenience_fee_response_data_item_convenience_fee_breakdown.py +28 -0
  282. pinelabs/types/calculate_convenience_fee_response_data_item_payment_method_metadata.py +31 -0
  283. pinelabs/types/capture_data_item.py +34 -0
  284. pinelabs/types/card_data.py +76 -0
  285. pinelabs/types/card_data_card_category.py +22 -0
  286. pinelabs/types/card_data_card_type.py +21 -0
  287. pinelabs/types/card_data_token_txn_type.py +5 -0
  288. pinelabs/types/card_detail_lookup_item.py +35 -0
  289. pinelabs/types/card_detail_lookup_item_payment_reference_type.py +7 -0
  290. pinelabs/types/card_payment_detail_item.py +66 -0
  291. pinelabs/types/card_token_response.py +49 -0
  292. pinelabs/types/cart_details.py +27 -0
  293. pinelabs/types/cart_item.py +66 -0
  294. pinelabs/types/challan_response.py +77 -0
  295. pinelabs/types/check_point_balance_response.py +43 -0
  296. pinelabs/types/check_point_balance_response_balance.py +28 -0
  297. pinelabs/types/check_point_balance_response_redeemable_amount.py +28 -0
  298. pinelabs/types/checkout_customer.py +55 -0
  299. pinelabs/types/checkout_product.py +29 -0
  300. pinelabs/types/checkout_purchase_details.py +29 -0
  301. pinelabs/types/create_bulk_payout_response.py +48 -0
  302. pinelabs/types/create_bulk_payout_response_status.py +7 -0
  303. pinelabs/types/create_debit_response.py +56 -0
  304. pinelabs/types/create_debit_response_status.py +7 -0
  305. pinelabs/types/create_payout_response.py +100 -0
  306. pinelabs/types/create_payout_response_mode.py +5 -0
  307. pinelabs/types/create_payout_response_status.py +7 -0
  308. pinelabs/types/create_presentation_response.py +58 -0
  309. pinelabs/types/create_presentation_response_status.py +10 -0
  310. pinelabs/types/create_subscription_response.py +146 -0
  311. pinelabs/types/create_subscription_response_allowed_payment_methods_item.py +7 -0
  312. pinelabs/types/create_subscription_response_integration_mode.py +5 -0
  313. pinelabs/types/create_subscription_response_payment_mode.py +5 -0
  314. pinelabs/types/create_subscription_response_status.py +23 -0
  315. pinelabs/types/cryptogram_response.py +39 -0
  316. pinelabs/types/currency_conversion_response.py +56 -0
  317. pinelabs/types/customer_details.py +59 -0
  318. pinelabs/types/customer_response.py +83 -0
  319. pinelabs/types/customer_response_status.py +5 -0
  320. pinelabs/types/customer_token_detail.py +74 -0
  321. pinelabs/types/customer_token_detail_payment_method.py +5 -0
  322. pinelabs/types/customer_tokens_response.py +48 -0
  323. pinelabs/types/delete_customer_token_response.py +41 -0
  324. pinelabs/types/delete_token_by_token_id_response.py +31 -0
  325. pinelabs/types/downpayment_details_response.py +27 -0
  326. pinelabs/types/downpayment_details_response_downpayment_details.py +47 -0
  327. pinelabs/types/downpayment_details_response_downpayment_details_allowed_payment_methods_item.py +7 -0
  328. pinelabs/types/downpayment_details_response_downpayment_details_amount_range.py +25 -0
  329. pinelabs/types/error_response.py +41 -0
  330. pinelabs/types/error_response_additional_error_details.py +36 -0
  331. pinelabs/types/generate_checkout_link_response.py +46 -0
  332. pinelabs/types/generate_token_response.py +32 -0
  333. pinelabs/types/get_account_balance_response.py +36 -0
  334. pinelabs/types/get_card_details_response.py +27 -0
  335. pinelabs/types/get_payouts_payment_item.py +98 -0
  336. pinelabs/types/get_payouts_payment_item_mode.py +5 -0
  337. pinelabs/types/get_payouts_payment_item_status.py +7 -0
  338. pinelabs/types/get_payouts_response.py +51 -0
  339. pinelabs/types/imei_product.py +41 -0
  340. pinelabs/types/imei_validation_response.py +37 -0
  341. pinelabs/types/imei_validation_response_products_item.py +57 -0
  342. pinelabs/types/imei_validation_response_products_item_product_brand_response.py +31 -0
  343. pinelabs/types/imei_validation_response_products_item_product_imei_status.py +5 -0
  344. pinelabs/types/issuer_offer.py +59 -0
  345. pinelabs/types/issuer_offer_issuer_data.py +79 -0
  346. pinelabs/types/issuer_offer_issuer_data_auth_type.py +5 -0
  347. pinelabs/types/issuer_offer_issuer_data_penny_transaction_amount.py +20 -0
  348. pinelabs/types/issuer_offer_issuer_type.py +10 -0
  349. pinelabs/types/list_plans_response.py +31 -0
  350. pinelabs/types/list_presentations_response.py +31 -0
  351. pinelabs/types/list_settlements_response.py +42 -0
  352. pinelabs/types/list_subscriptions_response.py +31 -0
  353. pinelabs/types/merchant_metadata.py +8 -0
  354. pinelabs/types/net_banking_data_response.py +32 -0
  355. pinelabs/types/net_banking_data_response_txn_mode.py +5 -0
  356. pinelabs/types/offer_discovery_error_response.py +34 -0
  357. pinelabs/types/offer_discovery_error_response_additional_error_details.py +22 -0
  358. pinelabs/types/offer_discovery_response.py +27 -0
  359. pinelabs/types/offer_validation_error_response.py +22 -0
  360. pinelabs/types/offer_validation_error_response_additional_error_details.py +22 -0
  361. pinelabs/types/offer_validation_response.py +24 -0
  362. pinelabs/types/order_response.py +24 -0
  363. pinelabs/types/order_response_data.py +127 -0
  364. pinelabs/types/order_response_data_integration_mode.py +5 -0
  365. pinelabs/types/order_response_data_purchase_details.py +26 -0
  366. pinelabs/types/order_response_data_status.py +18 -0
  367. pinelabs/types/order_response_data_type.py +5 -0
  368. pinelabs/types/otp_generate_response.py +33 -0
  369. pinelabs/types/otp_generate_response_meta_data.py +26 -0
  370. pinelabs/types/otp_generate_response_next_item.py +5 -0
  371. pinelabs/types/page_info.py +41 -0
  372. pinelabs/types/pagination_links.py +34 -0
  373. pinelabs/types/pagination_links_first.py +22 -0
  374. pinelabs/types/pagination_links_last.py +22 -0
  375. pinelabs/types/pagination_links_next.py +22 -0
  376. pinelabs/types/pagination_links_self.py +22 -0
  377. pinelabs/types/pagination_meta.py +41 -0
  378. pinelabs/types/payment_item.py +87 -0
  379. pinelabs/types/payment_item_error_detail.py +31 -0
  380. pinelabs/types/payment_item_payment_method.py +8 -0
  381. pinelabs/types/payment_item_payment_option.py +28 -0
  382. pinelabs/types/payment_item_status.py +7 -0
  383. pinelabs/types/payment_link_account_details.py +24 -0
  384. pinelabs/types/payment_link_address.py +56 -0
  385. pinelabs/types/payment_link_bank_details.py +36 -0
  386. pinelabs/types/payment_link_cart_details.py +27 -0
  387. pinelabs/types/payment_link_cart_item.py +29 -0
  388. pinelabs/types/payment_link_customer.py +64 -0
  389. pinelabs/types/payment_link_product_detail.py +30 -0
  390. pinelabs/types/payment_link_response.py +113 -0
  391. pinelabs/types/payment_link_response_allowed_payment_methods_item.py +7 -0
  392. pinelabs/types/payment_link_response_status.py +8 -0
  393. pinelabs/types/payment_link_split_detail.py +57 -0
  394. pinelabs/types/payment_link_split_detail_status.py +5 -0
  395. pinelabs/types/payment_link_split_info.py +32 -0
  396. pinelabs/types/payment_object.py +51 -0
  397. pinelabs/types/payment_object_acquirer_data.py +23 -0
  398. pinelabs/types/payment_object_payment_amount.py +20 -0
  399. pinelabs/types/payment_object_payment_method.py +5 -0
  400. pinelabs/types/payment_object_status.py +7 -0
  401. pinelabs/types/payment_request_item.py +54 -0
  402. pinelabs/types/payment_request_item_device_info.py +53 -0
  403. pinelabs/types/payment_request_item_device_info_operating_system.py +7 -0
  404. pinelabs/types/payment_request_item_offer_data.py +27 -0
  405. pinelabs/types/payment_request_item_offer_data_offer_details.py +52 -0
  406. pinelabs/types/payment_request_item_offer_data_offer_details_tenure.py +136 -0
  407. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_auth_amount.py +20 -0
  408. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_cart_coupon_discount_amount.py +20 -0
  409. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown.py +56 -0
  410. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_additional_fee_amount.py +20 -0
  411. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_applicable_fee_amount.py +20 -0
  412. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_amount.py +20 -0
  413. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_fee_calculated_on_amount.py +20 -0
  414. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_maximum_fee_amount.py +20 -0
  415. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_subvented_fee_amount.py +20 -0
  416. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_convenience_fee_breakdown_tax_amount.py +20 -0
  417. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item.py +73 -0
  418. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_after_downpayment_reduced_product_amount.py +20 -0
  419. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_cart_coupon_discount_product_share.py +20 -0
  420. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount.py +36 -0
  421. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup.py +34 -0
  422. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_brand.py +22 -0
  423. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_brand_amount.py +20 -0
  424. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_dealer.py +22 -0
  425. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_dealer_amount.py +20 -0
  426. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_issuer.py +22 -0
  427. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_issuer_amount.py +20 -0
  428. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_merchant.py +24 -0
  429. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_breakup_merchant_amount.py +20 -0
  430. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_max_amount.py +20 -0
  431. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_discount_min_amount.py +20 -0
  432. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_downpayment_amount.py +20 -0
  433. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_interest_amount.py +20 -0
  434. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_product_amount.py +20 -0
  435. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_product_coupon_discount_amount.py +20 -0
  436. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_product_offer_parameters_item.py +21 -0
  437. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention.py +36 -0
  438. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_amount.py +20 -0
  439. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup.py +34 -0
  440. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_brand.py +22 -0
  441. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_brand_amount.py +20 -0
  442. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer.py +24 -0
  443. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_dealer_amount.py +20 -0
  444. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer.py +24 -0
  445. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_issuer_amount.py +20 -0
  446. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant.py +24 -0
  447. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_breakup_merchant_amount.py +20 -0
  448. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_max_amount.py +20 -0
  449. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_details_item_subvention_min_amount.py +20 -0
  450. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_downpayment_details.py +28 -0
  451. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_downpayment_details_downpayment_amount.py +20 -0
  452. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_intrest_amount.py +20 -0
  453. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_loan_amount.py +20 -0
  454. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_monthly_emi_amount.py +20 -0
  455. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_net_payment_amount.py +20 -0
  456. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_processing_fee_details.py +22 -0
  457. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_processing_fee_details_amount.py +20 -0
  458. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_split_emi_amount.py +20 -0
  459. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_total_coupon_discount.py +20 -0
  460. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_total_discount_amount.py +20 -0
  461. pinelabs/types/payment_request_item_offer_data_offer_details_tenure_total_emi_amount.py +20 -0
  462. pinelabs/types/payment_request_item_payment_method.py +8 -0
  463. pinelabs/types/payment_request_item_payment_option.py +53 -0
  464. pinelabs/types/payment_request_item_payment_option_bnpl_details.py +34 -0
  465. pinelabs/types/payment_request_item_payment_option_bnpl_details_bnpl_pay_code.py +5 -0
  466. pinelabs/types/payment_request_item_payment_option_card_details.py +51 -0
  467. pinelabs/types/payment_request_item_payment_option_card_token_details.py +61 -0
  468. pinelabs/types/payment_request_item_payment_option_cardless_details.py +31 -0
  469. pinelabs/types/payment_request_item_payment_option_points_card_details.py +36 -0
  470. pinelabs/types/payout_amount.py +31 -0
  471. pinelabs/types/payout_detail.py +117 -0
  472. pinelabs/types/payout_detail_mode.py +5 -0
  473. pinelabs/types/payout_detail_status.py +7 -0
  474. pinelabs/types/payout_link.py +31 -0
  475. pinelabs/types/plan_response.py +96 -0
  476. pinelabs/types/plan_response_frequency.py +10 -0
  477. pinelabs/types/plan_response_status.py +5 -0
  478. pinelabs/types/presentation_detail.py +82 -0
  479. pinelabs/types/presentation_detail_pdn_status.py +7 -0
  480. pinelabs/types/presentation_detail_status.py +18 -0
  481. pinelabs/types/product_detail.py +38 -0
  482. pinelabs/types/refund_response.py +24 -0
  483. pinelabs/types/refund_response_data.py +77 -0
  484. pinelabs/types/refund_response_data_integration_mode.py +5 -0
  485. pinelabs/types/refund_response_data_order_amount.py +20 -0
  486. pinelabs/types/refund_response_data_purchase_details.py +24 -0
  487. pinelabs/types/refund_response_data_purchase_details_customer.py +31 -0
  488. pinelabs/types/refund_response_data_purchase_details_split_info.py +21 -0
  489. pinelabs/types/refund_response_data_status.py +5 -0
  490. pinelabs/types/refund_response_data_type.py +5 -0
  491. pinelabs/types/resend_otp_error_response.py +36 -0
  492. pinelabs/types/service_provider_token_response.py +62 -0
  493. pinelabs/types/service_provider_token_response_payment_method.py +5 -0
  494. pinelabs/types/service_provider_tokens_list_response.py +32 -0
  495. pinelabs/types/settlement_by_utr_response.py +146 -0
  496. pinelabs/types/settlement_by_utr_response_pagination.py +27 -0
  497. pinelabs/types/settlement_summary.py +76 -0
  498. pinelabs/types/settlement_transaction.py +96 -0
  499. pinelabs/types/simple_amount.py +31 -0
  500. pinelabs/types/split_detail.py +55 -0
  501. pinelabs/types/split_detail_refund.py +51 -0
  502. pinelabs/types/split_detail_refund_amount.py +20 -0
  503. pinelabs/types/split_detail_refund_status.py +5 -0
  504. pinelabs/types/split_detail_status.py +5 -0
  505. pinelabs/types/split_info.py +32 -0
  506. pinelabs/types/split_payment_object.py +49 -0
  507. pinelabs/types/split_payment_object_acquirer_data.py +22 -0
  508. pinelabs/types/split_payment_object_additional_detail.py +26 -0
  509. pinelabs/types/split_payment_object_capture_data_item.py +23 -0
  510. pinelabs/types/split_payment_object_capture_data_item_capture_amount.py +20 -0
  511. pinelabs/types/split_payment_object_payment_amount.py +20 -0
  512. pinelabs/types/split_payment_object_payment_method.py +7 -0
  513. pinelabs/types/split_payment_object_payment_option.py +20 -0
  514. pinelabs/types/split_payment_object_payment_option_card_data.py +40 -0
  515. pinelabs/types/split_payment_object_payment_option_card_data_card_type.py +5 -0
  516. pinelabs/types/split_payment_object_payment_option_card_data_token_txn_type.py +7 -0
  517. pinelabs/types/split_payment_object_status.py +7 -0
  518. pinelabs/types/split_settlement_detail.py +52 -0
  519. pinelabs/types/split_settlement_detail_amount.py +20 -0
  520. pinelabs/types/split_settlement_detail_release_amount.py +24 -0
  521. pinelabs/types/split_settlement_detail_status.py +5 -0
  522. pinelabs/types/split_settlement_response.py +24 -0
  523. pinelabs/types/split_settlement_response_data.py +43 -0
  524. pinelabs/types/split_settlement_response_data_allowed_payment_methods_item.py +7 -0
  525. pinelabs/types/split_settlement_response_data_integration_mode.py +5 -0
  526. pinelabs/types/split_settlement_response_data_order_amount.py +20 -0
  527. pinelabs/types/split_settlement_response_data_purchase_details.py +26 -0
  528. pinelabs/types/split_settlement_response_data_purchase_details_customer.py +28 -0
  529. pinelabs/types/split_settlement_response_data_purchase_details_split_info.py +21 -0
  530. pinelabs/types/split_settlement_response_data_status.py +18 -0
  531. pinelabs/types/split_settlement_response_data_type.py +5 -0
  532. pinelabs/types/submit_otp_error_response.py +42 -0
  533. pinelabs/types/submit_otp_error_response_meta_data.py +26 -0
  534. pinelabs/types/subscription_amount.py +31 -0
  535. pinelabs/types/subscription_detail.py +115 -0
  536. pinelabs/types/subscription_detail_allowed_payment_methods_item.py +7 -0
  537. pinelabs/types/subscription_detail_integration_mode.py +5 -0
  538. pinelabs/types/subscription_detail_payment_mode.py +5 -0
  539. pinelabs/types/subscription_detail_status.py +23 -0
  540. pinelabs/types/subscription_notification_response.py +56 -0
  541. pinelabs/types/subscription_notification_response_pdn_status.py +7 -0
  542. pinelabs/types/subscription_notification_response_status.py +10 -0
  543. pinelabs/types/tenure.py +127 -0
  544. pinelabs/types/tenure_auth_amount.py +20 -0
  545. pinelabs/types/tenure_cart_coupon_discount_amount.py +20 -0
  546. pinelabs/types/tenure_convenience_fee_breakdown.py +38 -0
  547. pinelabs/types/tenure_convenience_fee_breakdown_additional_fee_amount.py +20 -0
  548. pinelabs/types/tenure_convenience_fee_breakdown_applicable_fee_amount.py +20 -0
  549. pinelabs/types/tenure_convenience_fee_breakdown_fee_amount.py +20 -0
  550. pinelabs/types/tenure_convenience_fee_breakdown_fee_calculated_on_amount.py +20 -0
  551. pinelabs/types/tenure_convenience_fee_breakdown_maximum_fee_amount.py +20 -0
  552. pinelabs/types/tenure_convenience_fee_breakdown_subvented_fee_amount.py +20 -0
  553. pinelabs/types/tenure_convenience_fee_breakdown_tax_amount.py +20 -0
  554. pinelabs/types/tenure_details_item.py +49 -0
  555. pinelabs/types/tenure_details_item_after_downpayment_reduced_product_amount.py +20 -0
  556. pinelabs/types/tenure_details_item_cart_coupon_discount_product_share.py +20 -0
  557. pinelabs/types/tenure_details_item_discount.py +33 -0
  558. pinelabs/types/tenure_details_item_discount_amount.py +20 -0
  559. pinelabs/types/tenure_details_item_discount_breakup.py +22 -0
  560. pinelabs/types/tenure_details_item_discount_breakup_brand.py +20 -0
  561. pinelabs/types/tenure_details_item_discount_breakup_brand_amount.py +20 -0
  562. pinelabs/types/tenure_details_item_discount_breakup_merchant.py +20 -0
  563. pinelabs/types/tenure_details_item_discount_breakup_merchant_amount.py +20 -0
  564. pinelabs/types/tenure_details_item_discount_discount_deferred_duration_type.py +5 -0
  565. pinelabs/types/tenure_details_item_discount_discount_type.py +5 -0
  566. pinelabs/types/tenure_details_item_discount_max_amount.py +20 -0
  567. pinelabs/types/tenure_details_item_downpayment_amount.py +20 -0
  568. pinelabs/types/tenure_details_item_interest_amount.py +20 -0
  569. pinelabs/types/tenure_details_item_product_amount.py +20 -0
  570. pinelabs/types/tenure_details_item_product_coupon_discount_amount.py +20 -0
  571. pinelabs/types/tenure_details_item_product_offer_parameters_item.py +21 -0
  572. pinelabs/types/tenure_details_item_subvention.py +31 -0
  573. pinelabs/types/tenure_details_item_subvention_amount.py +20 -0
  574. pinelabs/types/tenure_details_item_subvention_breakup.py +20 -0
  575. pinelabs/types/tenure_details_item_subvention_breakup_brand.py +20 -0
  576. pinelabs/types/tenure_details_item_subvention_breakup_brand_amount.py +20 -0
  577. pinelabs/types/tenure_details_item_subvention_max_amount.py +20 -0
  578. pinelabs/types/tenure_details_item_subvention_min_amount.py +20 -0
  579. pinelabs/types/tenure_details_item_subvention_offer_type.py +5 -0
  580. pinelabs/types/tenure_details_item_subvention_subvention_type.py +5 -0
  581. pinelabs/types/tenure_discount.py +35 -0
  582. pinelabs/types/tenure_discount_amount.py +20 -0
  583. pinelabs/types/tenure_discount_breakup.py +26 -0
  584. pinelabs/types/tenure_discount_breakup_brand.py +20 -0
  585. pinelabs/types/tenure_discount_breakup_brand_amount.py +20 -0
  586. pinelabs/types/tenure_discount_breakup_dealer.py +20 -0
  587. pinelabs/types/tenure_discount_breakup_dealer_amount.py +20 -0
  588. pinelabs/types/tenure_discount_breakup_issuer.py +20 -0
  589. pinelabs/types/tenure_discount_breakup_issuer_amount.py +20 -0
  590. pinelabs/types/tenure_discount_breakup_merchant.py +20 -0
  591. pinelabs/types/tenure_discount_breakup_merchant_amount.py +20 -0
  592. pinelabs/types/tenure_discount_discount_deferred_duration_type.py +5 -0
  593. pinelabs/types/tenure_discount_discount_type.py +5 -0
  594. pinelabs/types/tenure_discount_max_amount.py +20 -0
  595. pinelabs/types/tenure_downpayment_details.py +24 -0
  596. pinelabs/types/tenure_downpayment_details_downpayment_amount.py +20 -0
  597. pinelabs/types/tenure_emi_type.py +5 -0
  598. pinelabs/types/tenure_interest_amount.py +20 -0
  599. pinelabs/types/tenure_issuer_offer_parameters_item.py +32 -0
  600. pinelabs/types/tenure_loan_amount.py +20 -0
  601. pinelabs/types/tenure_monthly_emi_amount.py +20 -0
  602. pinelabs/types/tenure_net_payment_amount.py +20 -0
  603. pinelabs/types/tenure_processing_fee_amount.py +20 -0
  604. pinelabs/types/tenure_processing_fee_details.py +25 -0
  605. pinelabs/types/tenure_processing_fee_details_amount.py +20 -0
  606. pinelabs/types/tenure_split_emi_amount.py +20 -0
  607. pinelabs/types/tenure_tenure_type.py +5 -0
  608. pinelabs/types/tenure_total_coupon_discount.py +20 -0
  609. pinelabs/types/tenure_total_discount_amount.py +20 -0
  610. pinelabs/types/tenure_total_down_payment_amount.py +20 -0
  611. pinelabs/types/tenure_total_emi_amount.py +20 -0
  612. pinelabs/types/tenure_total_subvention_amount.py +20 -0
  613. pinelabs/types/token_card_data.py +69 -0
  614. pinelabs/types/token_card_data_card_type.py +5 -0
  615. pinelabs/types/token_payment.py +27 -0
  616. pinelabs/types/token_payment_acquirer_data.py +41 -0
  617. pinelabs/types/token_payment_option.py +26 -0
  618. pinelabs/types/token_status.py +5 -0
  619. pinelabs/types/token_transactional_data.py +46 -0
  620. pinelabs/types/upi_details_response.py +30 -0
  621. pinelabs/types/upi_details_response_payer.py +22 -0
  622. pinelabs/types/upi_details_response_txn_mode.py +5 -0
  623. pinelabs_python-0.1.0.dist-info/METADATA +213 -0
  624. pinelabs_python-0.1.0.dist-info/RECORD +626 -0
  625. pinelabs_python-0.1.0.dist-info/WHEEL +4 -0
  626. pinelabs_python-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,1095 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import encode_path_param
10
+ from ..core.parse_error import ParsingError
11
+ from ..core.pydantic_utilities import parse_obj_as
12
+ from ..core.request_options import RequestOptions
13
+ from ..core.serialization import convert_and_respect_annotation_metadata
14
+ from ..errors.bad_request_error import BadRequestError
15
+ from ..errors.internal_server_error import InternalServerError
16
+ from ..errors.unauthorized_error import UnauthorizedError
17
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
18
+ from ..types.amount import Amount
19
+ from ..types.downpayment_details_response import DownpaymentDetailsResponse
20
+ from ..types.error_response import ErrorResponse
21
+ from ..types.imei_product import ImeiProduct
22
+ from ..types.offer_discovery_response import OfferDiscoveryResponse
23
+ from ..types.offer_validation_response import OfferValidationResponse
24
+ from ..types.product_detail import ProductDetail
25
+ from .types.downpayment_details_request_issuer import DownpaymentDetailsRequestIssuer
26
+ from .types.imei_validation_request_request_type import ImeiValidationRequestRequestType
27
+ from .types.offer_discovery_cardless_request_payment_option import OfferDiscoveryCardlessRequestPaymentOption
28
+ from .types.offer_discovery_request_cart_coupon_discount_amount import OfferDiscoveryRequestCartCouponDiscountAmount
29
+ from .types.offer_discovery_request_customer_details import OfferDiscoveryRequestCustomerDetails
30
+ from .types.offer_discovery_request_downpayment_details import OfferDiscoveryRequestDownpaymentDetails
31
+ from .types.offer_discovery_request_issuer import OfferDiscoveryRequestIssuer
32
+ from .types.offer_discovery_request_order_amount import OfferDiscoveryRequestOrderAmount
33
+ from .types.offer_discovery_request_payment_options import OfferDiscoveryRequestPaymentOptions
34
+ from .types.offer_discovery_request_product_details_item import OfferDiscoveryRequestProductDetailsItem
35
+ from .types.offer_validation_request_customer_details import OfferValidationRequestCustomerDetails
36
+ from .types.offer_validation_request_offer_data import OfferValidationRequestOfferData
37
+ from .types.offer_validation_request_order_amount import OfferValidationRequestOrderAmount
38
+ from .types.offer_validation_request_payment_amount import OfferValidationRequestPaymentAmount
39
+ from .types.offer_validation_request_payment_option import OfferValidationRequestPaymentOption
40
+ from pydantic import ValidationError
41
+
42
+ # this is used as the default value for optional parameters
43
+ OMIT = typing.cast(typing.Any, ...)
44
+
45
+
46
+ class RawAffordabilitySuiteClient:
47
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
48
+ self._client_wrapper = client_wrapper
49
+
50
+ def create_offer_discovery(
51
+ self,
52
+ *,
53
+ order_amount: OfferDiscoveryRequestOrderAmount,
54
+ accept_encoding: typing.Optional[str] = None,
55
+ product_details: typing.Optional[typing.Sequence[OfferDiscoveryRequestProductDetailsItem]] = OMIT,
56
+ cart_coupon_discount_amount: typing.Optional[OfferDiscoveryRequestCartCouponDiscountAmount] = OMIT,
57
+ issuer: typing.Optional[OfferDiscoveryRequestIssuer] = OMIT,
58
+ downpayment_details: typing.Optional[OfferDiscoveryRequestDownpaymentDetails] = OMIT,
59
+ payment_options: typing.Optional[OfferDiscoveryRequestPaymentOptions] = OMIT,
60
+ customer_details: typing.Optional[OfferDiscoveryRequestCustomerDetails] = OMIT,
61
+ request_options: typing.Optional[RequestOptions] = None,
62
+ ) -> HttpResponse[OfferDiscoveryResponse]:
63
+ """
64
+ Use this API to discover offers available on cart amount or product and calculate the EMI.
65
+
66
+ Parameters
67
+ ----------
68
+ order_amount : OfferDiscoveryRequestOrderAmount
69
+ An object that contains the transaction amount details.
70
+
71
+ accept_encoding : typing.Optional[str]
72
+ Type of content-encoding supported. Accepted value: `gzip`
73
+
74
+ product_details : typing.Optional[typing.Sequence[OfferDiscoveryRequestProductDetailsItem]]
75
+ Mandatory for Brand EMI. An object that contains product details.
76
+
77
+ cart_coupon_discount_amount : typing.Optional[OfferDiscoveryRequestCartCouponDiscountAmount]
78
+ An object that contains the cart coupon discount amount details.
79
+
80
+ issuer : typing.Optional[OfferDiscoveryRequestIssuer]
81
+ An object that contains the issuer details.
82
+
83
+ downpayment_details : typing.Optional[OfferDiscoveryRequestDownpaymentDetails]
84
+ Mandatory for EMI with Downpayment. An object that contains the downpayment amount details.
85
+
86
+ payment_options : typing.Optional[OfferDiscoveryRequestPaymentOptions]
87
+ An object that contains the details of the payment options. You can use either `card_details` or `card_token_details` as a payment option.
88
+
89
+ customer_details : typing.Optional[OfferDiscoveryRequestCustomerDetails]
90
+ An object that contains the customer details.
91
+
92
+ request_options : typing.Optional[RequestOptions]
93
+ Request-specific configuration.
94
+
95
+ Returns
96
+ -------
97
+ HttpResponse[OfferDiscoveryResponse]
98
+ 200
99
+ """
100
+ _response = self._client_wrapper.httpx_client.request(
101
+ "api/affordability/v1/offer/discovery",
102
+ method="POST",
103
+ json={
104
+ "order_amount": convert_and_respect_annotation_metadata(
105
+ object_=order_amount, annotation=OfferDiscoveryRequestOrderAmount, direction="write"
106
+ ),
107
+ "product_details": convert_and_respect_annotation_metadata(
108
+ object_=product_details,
109
+ annotation=typing.Sequence[OfferDiscoveryRequestProductDetailsItem],
110
+ direction="write",
111
+ ),
112
+ "cart_coupon_discount_amount": convert_and_respect_annotation_metadata(
113
+ object_=cart_coupon_discount_amount,
114
+ annotation=OfferDiscoveryRequestCartCouponDiscountAmount,
115
+ direction="write",
116
+ ),
117
+ "issuer": convert_and_respect_annotation_metadata(
118
+ object_=issuer, annotation=OfferDiscoveryRequestIssuer, direction="write"
119
+ ),
120
+ "downpayment_details": convert_and_respect_annotation_metadata(
121
+ object_=downpayment_details, annotation=OfferDiscoveryRequestDownpaymentDetails, direction="write"
122
+ ),
123
+ "payment_options": convert_and_respect_annotation_metadata(
124
+ object_=payment_options, annotation=OfferDiscoveryRequestPaymentOptions, direction="write"
125
+ ),
126
+ "customer_details": convert_and_respect_annotation_metadata(
127
+ object_=customer_details, annotation=OfferDiscoveryRequestCustomerDetails, direction="write"
128
+ ),
129
+ },
130
+ headers={
131
+ "content-type": "application/json",
132
+ "Accept-Encoding": str(accept_encoding) if accept_encoding is not None else None,
133
+ },
134
+ request_options=request_options,
135
+ omit=OMIT,
136
+ )
137
+ try:
138
+ if 200 <= _response.status_code < 300:
139
+ _data = typing.cast(
140
+ OfferDiscoveryResponse,
141
+ parse_obj_as(
142
+ type_=OfferDiscoveryResponse, # type: ignore
143
+ object_=_response.json(),
144
+ ),
145
+ )
146
+ return HttpResponse(response=_response, data=_data)
147
+ if _response.status_code == 400:
148
+ raise BadRequestError(
149
+ headers=dict(_response.headers),
150
+ body=typing.cast(
151
+ typing.Any,
152
+ parse_obj_as(
153
+ type_=typing.Any, # type: ignore
154
+ object_=_response.json(),
155
+ ),
156
+ ),
157
+ )
158
+ if _response.status_code == 422:
159
+ raise UnprocessableEntityError(
160
+ headers=dict(_response.headers),
161
+ body=typing.cast(
162
+ typing.Any,
163
+ parse_obj_as(
164
+ type_=typing.Any, # type: ignore
165
+ object_=_response.json(),
166
+ ),
167
+ ),
168
+ )
169
+ _response_json = _response.json()
170
+ except JSONDecodeError:
171
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
172
+ except ValidationError as e:
173
+ raise ParsingError(
174
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
175
+ )
176
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
177
+
178
+ def create_cardless_offer_discovery(
179
+ self,
180
+ *,
181
+ order_amount: Amount,
182
+ payment_option: OfferDiscoveryCardlessRequestPaymentOption,
183
+ product_details: typing.Optional[typing.Sequence[ProductDetail]] = OMIT,
184
+ cart_coupon_discount_amount: typing.Optional[Amount] = OMIT,
185
+ request_options: typing.Optional[RequestOptions] = None,
186
+ ) -> HttpResponse[OfferDiscoveryResponse]:
187
+ """
188
+ Discover available cardless EMI offers for a given order amount and product.
189
+ Used when customer does not use a card for EMI (e.g. BNPL-style cardless EMI).
190
+
191
+ Parameters
192
+ ----------
193
+ order_amount : Amount
194
+
195
+ payment_option : OfferDiscoveryCardlessRequestPaymentOption
196
+ An object that contains details related to the payment option.
197
+
198
+ product_details : typing.Optional[typing.Sequence[ProductDetail]]
199
+ Mandatory for Brand EMI. Contains product details.
200
+
201
+ cart_coupon_discount_amount : typing.Optional[Amount]
202
+
203
+ request_options : typing.Optional[RequestOptions]
204
+ Request-specific configuration.
205
+
206
+ Returns
207
+ -------
208
+ HttpResponse[OfferDiscoveryResponse]
209
+ Cardless offers discovered successfully.
210
+ """
211
+ _response = self._client_wrapper.httpx_client.request(
212
+ "api/affordability/v1/offer/discovery/cardless",
213
+ method="POST",
214
+ json={
215
+ "order_amount": convert_and_respect_annotation_metadata(
216
+ object_=order_amount, annotation=Amount, direction="write"
217
+ ),
218
+ "product_details": convert_and_respect_annotation_metadata(
219
+ object_=product_details, annotation=typing.Sequence[ProductDetail], direction="write"
220
+ ),
221
+ "cart_coupon_discount_amount": convert_and_respect_annotation_metadata(
222
+ object_=cart_coupon_discount_amount, annotation=Amount, direction="write"
223
+ ),
224
+ "payment_option": convert_and_respect_annotation_metadata(
225
+ object_=payment_option, annotation=OfferDiscoveryCardlessRequestPaymentOption, direction="write"
226
+ ),
227
+ },
228
+ headers={
229
+ "content-type": "application/json",
230
+ },
231
+ request_options=request_options,
232
+ omit=OMIT,
233
+ )
234
+ try:
235
+ if 200 <= _response.status_code < 300:
236
+ _data = typing.cast(
237
+ OfferDiscoveryResponse,
238
+ parse_obj_as(
239
+ type_=OfferDiscoveryResponse, # type: ignore
240
+ object_=_response.json(),
241
+ ),
242
+ )
243
+ return HttpResponse(response=_response, data=_data)
244
+ if _response.status_code == 400:
245
+ raise BadRequestError(
246
+ headers=dict(_response.headers),
247
+ body=typing.cast(
248
+ typing.Any,
249
+ parse_obj_as(
250
+ type_=typing.Any, # type: ignore
251
+ object_=_response.json(),
252
+ ),
253
+ ),
254
+ )
255
+ if _response.status_code == 401:
256
+ raise UnauthorizedError(
257
+ headers=dict(_response.headers),
258
+ body=typing.cast(
259
+ ErrorResponse,
260
+ parse_obj_as(
261
+ type_=ErrorResponse, # type: ignore
262
+ object_=_response.json(),
263
+ ),
264
+ ),
265
+ )
266
+ if _response.status_code == 422:
267
+ raise UnprocessableEntityError(
268
+ headers=dict(_response.headers),
269
+ body=typing.cast(
270
+ typing.Any,
271
+ parse_obj_as(
272
+ type_=typing.Any, # type: ignore
273
+ object_=_response.json(),
274
+ ),
275
+ ),
276
+ )
277
+ if _response.status_code == 500:
278
+ raise InternalServerError(
279
+ headers=dict(_response.headers),
280
+ body=typing.cast(
281
+ ErrorResponse,
282
+ parse_obj_as(
283
+ type_=ErrorResponse, # type: ignore
284
+ object_=_response.json(),
285
+ ),
286
+ ),
287
+ )
288
+ _response_json = _response.json()
289
+ except JSONDecodeError:
290
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
291
+ except ValidationError as e:
292
+ raise ParsingError(
293
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
294
+ )
295
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
296
+
297
+ def create_down_payment_details(
298
+ self,
299
+ *,
300
+ order_amount: Amount,
301
+ product_details: typing.Optional[typing.Sequence[ProductDetail]] = OMIT,
302
+ cart_coupon_discount_amount: typing.Optional[Amount] = OMIT,
303
+ issuer: typing.Optional[DownpaymentDetailsRequestIssuer] = OMIT,
304
+ request_options: typing.Optional[RequestOptions] = None,
305
+ ) -> HttpResponse[DownpaymentDetailsResponse]:
306
+ """
307
+ Retrieve applicable down payment range and EMI repayment details
308
+ based on order amount and issuer BIN.
309
+
310
+ Parameters
311
+ ----------
312
+ order_amount : Amount
313
+
314
+ product_details : typing.Optional[typing.Sequence[ProductDetail]]
315
+ Mandatory for Brand EMI. Contains product details.
316
+
317
+ cart_coupon_discount_amount : typing.Optional[Amount]
318
+
319
+ issuer : typing.Optional[DownpaymentDetailsRequestIssuer]
320
+ Issuer identification details.
321
+
322
+ request_options : typing.Optional[RequestOptions]
323
+ Request-specific configuration.
324
+
325
+ Returns
326
+ -------
327
+ HttpResponse[DownpaymentDetailsResponse]
328
+ Down payment details retrieved successfully.
329
+ """
330
+ _response = self._client_wrapper.httpx_client.request(
331
+ "api/affordability/v1/offer/downpayment/details",
332
+ method="POST",
333
+ json={
334
+ "order_amount": convert_and_respect_annotation_metadata(
335
+ object_=order_amount, annotation=Amount, direction="write"
336
+ ),
337
+ "product_details": convert_and_respect_annotation_metadata(
338
+ object_=product_details, annotation=typing.Sequence[ProductDetail], direction="write"
339
+ ),
340
+ "cart_coupon_discount_amount": convert_and_respect_annotation_metadata(
341
+ object_=cart_coupon_discount_amount, annotation=Amount, direction="write"
342
+ ),
343
+ "issuer": convert_and_respect_annotation_metadata(
344
+ object_=issuer, annotation=DownpaymentDetailsRequestIssuer, direction="write"
345
+ ),
346
+ },
347
+ headers={
348
+ "content-type": "application/json",
349
+ },
350
+ request_options=request_options,
351
+ omit=OMIT,
352
+ )
353
+ try:
354
+ if 200 <= _response.status_code < 300:
355
+ _data = typing.cast(
356
+ DownpaymentDetailsResponse,
357
+ parse_obj_as(
358
+ type_=DownpaymentDetailsResponse, # type: ignore
359
+ object_=_response.json(),
360
+ ),
361
+ )
362
+ return HttpResponse(response=_response, data=_data)
363
+ if _response.status_code == 400:
364
+ raise BadRequestError(
365
+ headers=dict(_response.headers),
366
+ body=typing.cast(
367
+ typing.Any,
368
+ parse_obj_as(
369
+ type_=typing.Any, # type: ignore
370
+ object_=_response.json(),
371
+ ),
372
+ ),
373
+ )
374
+ if _response.status_code == 401:
375
+ raise UnauthorizedError(
376
+ headers=dict(_response.headers),
377
+ body=typing.cast(
378
+ ErrorResponse,
379
+ parse_obj_as(
380
+ type_=ErrorResponse, # type: ignore
381
+ object_=_response.json(),
382
+ ),
383
+ ),
384
+ )
385
+ if _response.status_code == 500:
386
+ raise InternalServerError(
387
+ headers=dict(_response.headers),
388
+ body=typing.cast(
389
+ ErrorResponse,
390
+ parse_obj_as(
391
+ type_=ErrorResponse, # type: ignore
392
+ object_=_response.json(),
393
+ ),
394
+ ),
395
+ )
396
+ _response_json = _response.json()
397
+ except JSONDecodeError:
398
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
399
+ except ValidationError as e:
400
+ raise ParsingError(
401
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
402
+ )
403
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
404
+
405
+ def offer_validation_create(
406
+ self,
407
+ *,
408
+ payment_method: str,
409
+ order_amount: OfferValidationRequestOrderAmount,
410
+ payment_amount: OfferValidationRequestPaymentAmount,
411
+ payment_option: OfferValidationRequestPaymentOption,
412
+ offer_data: OfferValidationRequestOfferData,
413
+ accept_encoding: typing.Optional[str] = None,
414
+ customer_details: typing.Optional[OfferValidationRequestCustomerDetails] = OMIT,
415
+ request_options: typing.Optional[RequestOptions] = None,
416
+ ) -> HttpResponse[OfferValidationResponse]:
417
+ """
418
+ Use this API for validating applied offers.
419
+
420
+ Parameters
421
+ ----------
422
+ payment_method : str
423
+ Type of payment method you want to use to accept a payment.<br><br>Accepted values:<ul><li>`CREDIT_EMI`</li><li>`DEBIT_EMI`</li><li>`CARDLESS_EMI`</ul></li>
424
+
425
+ order_amount : OfferValidationRequestOrderAmount
426
+ An object that contains order amount.
427
+
428
+ payment_amount : OfferValidationRequestPaymentAmount
429
+ An object that contains the payment amount details after the offer has been applied.<br><br>**Note**: Ensure you pass the `auth_amount` details. This `auth_amount` detail is returned through our Offer Discovery API response.
430
+
431
+ payment_option : OfferValidationRequestPaymentOption
432
+ An object that contains the details of the payment options.<br><br>You can use either `card_details` or `card_token_details` or `cardless_details` as a payment option. One object is mandatory to process the request.
433
+
434
+ offer_data : OfferValidationRequestOfferData
435
+ An object that contains details related to the offer.
436
+
437
+ accept_encoding : typing.Optional[str]
438
+ Type of content-encoding supported.<br><br>Accepted value: `gzip`
439
+
440
+ customer_details : typing.Optional[OfferValidationRequestCustomerDetails]
441
+ An object that contains details related to the customer.
442
+
443
+ request_options : typing.Optional[RequestOptions]
444
+ Request-specific configuration.
445
+
446
+ Returns
447
+ -------
448
+ HttpResponse[OfferValidationResponse]
449
+ 200
450
+ """
451
+ _response = self._client_wrapper.httpx_client.request(
452
+ "api/affordability/v1/offer/validate",
453
+ method="POST",
454
+ json={
455
+ "payment_method": payment_method,
456
+ "order_amount": convert_and_respect_annotation_metadata(
457
+ object_=order_amount, annotation=OfferValidationRequestOrderAmount, direction="write"
458
+ ),
459
+ "payment_amount": convert_and_respect_annotation_metadata(
460
+ object_=payment_amount, annotation=OfferValidationRequestPaymentAmount, direction="write"
461
+ ),
462
+ "payment_option": convert_and_respect_annotation_metadata(
463
+ object_=payment_option, annotation=OfferValidationRequestPaymentOption, direction="write"
464
+ ),
465
+ "offer_data": convert_and_respect_annotation_metadata(
466
+ object_=offer_data, annotation=OfferValidationRequestOfferData, direction="write"
467
+ ),
468
+ "customer_details": convert_and_respect_annotation_metadata(
469
+ object_=customer_details, annotation=OfferValidationRequestCustomerDetails, direction="write"
470
+ ),
471
+ },
472
+ headers={
473
+ "content-type": "application/json",
474
+ "Accept-Encoding": str(accept_encoding) if accept_encoding is not None else None,
475
+ },
476
+ request_options=request_options,
477
+ omit=OMIT,
478
+ )
479
+ try:
480
+ if 200 <= _response.status_code < 300:
481
+ _data = typing.cast(
482
+ OfferValidationResponse,
483
+ parse_obj_as(
484
+ type_=OfferValidationResponse, # type: ignore
485
+ object_=_response.json(),
486
+ ),
487
+ )
488
+ return HttpResponse(response=_response, data=_data)
489
+ if _response.status_code == 400:
490
+ raise BadRequestError(
491
+ headers=dict(_response.headers),
492
+ body=typing.cast(
493
+ typing.Any,
494
+ parse_obj_as(
495
+ type_=typing.Any, # type: ignore
496
+ object_=_response.json(),
497
+ ),
498
+ ),
499
+ )
500
+ _response_json = _response.json()
501
+ except JSONDecodeError:
502
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
503
+ except ValidationError as e:
504
+ raise ParsingError(
505
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
506
+ )
507
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
508
+
509
+ def create_imei_validation(
510
+ self,
511
+ order_id: str,
512
+ *,
513
+ merchant_product_imei_reference: str,
514
+ request_type: ImeiValidationRequestRequestType,
515
+ products: typing.Sequence[ImeiProduct],
516
+ request_options: typing.Optional[RequestOptions] = None,
517
+ ) -> HttpResponse[None]:
518
+ """
519
+ Validate or block/unblock IMEI numbers for Brand EMI transactions.
520
+ Used to confirm the device is eligible for the selected EMI program.
521
+
522
+ Parameters
523
+ ----------
524
+ order_id : str
525
+ Unique Pine Labs order identifier.
526
+
527
+ merchant_product_imei_reference : str
528
+ **Idempotency Key.** Merchant product IMEI reference. Duplicate requests with the same `merchant_product_imei_reference` will return the existing result instead of creating a new one.
529
+
530
+ request_type : ImeiValidationRequestRequestType
531
+ IMEI request type.
532
+
533
+ products : typing.Sequence[ImeiProduct]
534
+ Array of product details for IMEI validation.
535
+
536
+ request_options : typing.Optional[RequestOptions]
537
+ Request-specific configuration.
538
+
539
+ Returns
540
+ -------
541
+ HttpResponse[None]
542
+ """
543
+ _response = self._client_wrapper.httpx_client.request(
544
+ f"api/affordability/v1/product/{encode_path_param(order_id)}/imei",
545
+ method="POST",
546
+ json={
547
+ "merchant_product_imei_reference": merchant_product_imei_reference,
548
+ "request_type": request_type,
549
+ "products": convert_and_respect_annotation_metadata(
550
+ object_=products, annotation=typing.Sequence[ImeiProduct], direction="write"
551
+ ),
552
+ },
553
+ headers={
554
+ "content-type": "application/json",
555
+ },
556
+ request_options=request_options,
557
+ omit=OMIT,
558
+ )
559
+ try:
560
+ if 200 <= _response.status_code < 300:
561
+ return HttpResponse(response=_response, data=None)
562
+ _response_json = _response.json()
563
+ except JSONDecodeError:
564
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
565
+ except ValidationError as e:
566
+ raise ParsingError(
567
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
568
+ )
569
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
570
+
571
+
572
+ class AsyncRawAffordabilitySuiteClient:
573
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
574
+ self._client_wrapper = client_wrapper
575
+
576
+ async def create_offer_discovery(
577
+ self,
578
+ *,
579
+ order_amount: OfferDiscoveryRequestOrderAmount,
580
+ accept_encoding: typing.Optional[str] = None,
581
+ product_details: typing.Optional[typing.Sequence[OfferDiscoveryRequestProductDetailsItem]] = OMIT,
582
+ cart_coupon_discount_amount: typing.Optional[OfferDiscoveryRequestCartCouponDiscountAmount] = OMIT,
583
+ issuer: typing.Optional[OfferDiscoveryRequestIssuer] = OMIT,
584
+ downpayment_details: typing.Optional[OfferDiscoveryRequestDownpaymentDetails] = OMIT,
585
+ payment_options: typing.Optional[OfferDiscoveryRequestPaymentOptions] = OMIT,
586
+ customer_details: typing.Optional[OfferDiscoveryRequestCustomerDetails] = OMIT,
587
+ request_options: typing.Optional[RequestOptions] = None,
588
+ ) -> AsyncHttpResponse[OfferDiscoveryResponse]:
589
+ """
590
+ Use this API to discover offers available on cart amount or product and calculate the EMI.
591
+
592
+ Parameters
593
+ ----------
594
+ order_amount : OfferDiscoveryRequestOrderAmount
595
+ An object that contains the transaction amount details.
596
+
597
+ accept_encoding : typing.Optional[str]
598
+ Type of content-encoding supported. Accepted value: `gzip`
599
+
600
+ product_details : typing.Optional[typing.Sequence[OfferDiscoveryRequestProductDetailsItem]]
601
+ Mandatory for Brand EMI. An object that contains product details.
602
+
603
+ cart_coupon_discount_amount : typing.Optional[OfferDiscoveryRequestCartCouponDiscountAmount]
604
+ An object that contains the cart coupon discount amount details.
605
+
606
+ issuer : typing.Optional[OfferDiscoveryRequestIssuer]
607
+ An object that contains the issuer details.
608
+
609
+ downpayment_details : typing.Optional[OfferDiscoveryRequestDownpaymentDetails]
610
+ Mandatory for EMI with Downpayment. An object that contains the downpayment amount details.
611
+
612
+ payment_options : typing.Optional[OfferDiscoveryRequestPaymentOptions]
613
+ An object that contains the details of the payment options. You can use either `card_details` or `card_token_details` as a payment option.
614
+
615
+ customer_details : typing.Optional[OfferDiscoveryRequestCustomerDetails]
616
+ An object that contains the customer details.
617
+
618
+ request_options : typing.Optional[RequestOptions]
619
+ Request-specific configuration.
620
+
621
+ Returns
622
+ -------
623
+ AsyncHttpResponse[OfferDiscoveryResponse]
624
+ 200
625
+ """
626
+ _response = await self._client_wrapper.httpx_client.request(
627
+ "api/affordability/v1/offer/discovery",
628
+ method="POST",
629
+ json={
630
+ "order_amount": convert_and_respect_annotation_metadata(
631
+ object_=order_amount, annotation=OfferDiscoveryRequestOrderAmount, direction="write"
632
+ ),
633
+ "product_details": convert_and_respect_annotation_metadata(
634
+ object_=product_details,
635
+ annotation=typing.Sequence[OfferDiscoveryRequestProductDetailsItem],
636
+ direction="write",
637
+ ),
638
+ "cart_coupon_discount_amount": convert_and_respect_annotation_metadata(
639
+ object_=cart_coupon_discount_amount,
640
+ annotation=OfferDiscoveryRequestCartCouponDiscountAmount,
641
+ direction="write",
642
+ ),
643
+ "issuer": convert_and_respect_annotation_metadata(
644
+ object_=issuer, annotation=OfferDiscoveryRequestIssuer, direction="write"
645
+ ),
646
+ "downpayment_details": convert_and_respect_annotation_metadata(
647
+ object_=downpayment_details, annotation=OfferDiscoveryRequestDownpaymentDetails, direction="write"
648
+ ),
649
+ "payment_options": convert_and_respect_annotation_metadata(
650
+ object_=payment_options, annotation=OfferDiscoveryRequestPaymentOptions, direction="write"
651
+ ),
652
+ "customer_details": convert_and_respect_annotation_metadata(
653
+ object_=customer_details, annotation=OfferDiscoveryRequestCustomerDetails, direction="write"
654
+ ),
655
+ },
656
+ headers={
657
+ "content-type": "application/json",
658
+ "Accept-Encoding": str(accept_encoding) if accept_encoding is not None else None,
659
+ },
660
+ request_options=request_options,
661
+ omit=OMIT,
662
+ )
663
+ try:
664
+ if 200 <= _response.status_code < 300:
665
+ _data = typing.cast(
666
+ OfferDiscoveryResponse,
667
+ parse_obj_as(
668
+ type_=OfferDiscoveryResponse, # type: ignore
669
+ object_=_response.json(),
670
+ ),
671
+ )
672
+ return AsyncHttpResponse(response=_response, data=_data)
673
+ if _response.status_code == 400:
674
+ raise BadRequestError(
675
+ headers=dict(_response.headers),
676
+ body=typing.cast(
677
+ typing.Any,
678
+ parse_obj_as(
679
+ type_=typing.Any, # type: ignore
680
+ object_=_response.json(),
681
+ ),
682
+ ),
683
+ )
684
+ if _response.status_code == 422:
685
+ raise UnprocessableEntityError(
686
+ headers=dict(_response.headers),
687
+ body=typing.cast(
688
+ typing.Any,
689
+ parse_obj_as(
690
+ type_=typing.Any, # type: ignore
691
+ object_=_response.json(),
692
+ ),
693
+ ),
694
+ )
695
+ _response_json = _response.json()
696
+ except JSONDecodeError:
697
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
698
+ except ValidationError as e:
699
+ raise ParsingError(
700
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
701
+ )
702
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
703
+
704
+ async def create_cardless_offer_discovery(
705
+ self,
706
+ *,
707
+ order_amount: Amount,
708
+ payment_option: OfferDiscoveryCardlessRequestPaymentOption,
709
+ product_details: typing.Optional[typing.Sequence[ProductDetail]] = OMIT,
710
+ cart_coupon_discount_amount: typing.Optional[Amount] = OMIT,
711
+ request_options: typing.Optional[RequestOptions] = None,
712
+ ) -> AsyncHttpResponse[OfferDiscoveryResponse]:
713
+ """
714
+ Discover available cardless EMI offers for a given order amount and product.
715
+ Used when customer does not use a card for EMI (e.g. BNPL-style cardless EMI).
716
+
717
+ Parameters
718
+ ----------
719
+ order_amount : Amount
720
+
721
+ payment_option : OfferDiscoveryCardlessRequestPaymentOption
722
+ An object that contains details related to the payment option.
723
+
724
+ product_details : typing.Optional[typing.Sequence[ProductDetail]]
725
+ Mandatory for Brand EMI. Contains product details.
726
+
727
+ cart_coupon_discount_amount : typing.Optional[Amount]
728
+
729
+ request_options : typing.Optional[RequestOptions]
730
+ Request-specific configuration.
731
+
732
+ Returns
733
+ -------
734
+ AsyncHttpResponse[OfferDiscoveryResponse]
735
+ Cardless offers discovered successfully.
736
+ """
737
+ _response = await self._client_wrapper.httpx_client.request(
738
+ "api/affordability/v1/offer/discovery/cardless",
739
+ method="POST",
740
+ json={
741
+ "order_amount": convert_and_respect_annotation_metadata(
742
+ object_=order_amount, annotation=Amount, direction="write"
743
+ ),
744
+ "product_details": convert_and_respect_annotation_metadata(
745
+ object_=product_details, annotation=typing.Sequence[ProductDetail], direction="write"
746
+ ),
747
+ "cart_coupon_discount_amount": convert_and_respect_annotation_metadata(
748
+ object_=cart_coupon_discount_amount, annotation=Amount, direction="write"
749
+ ),
750
+ "payment_option": convert_and_respect_annotation_metadata(
751
+ object_=payment_option, annotation=OfferDiscoveryCardlessRequestPaymentOption, direction="write"
752
+ ),
753
+ },
754
+ headers={
755
+ "content-type": "application/json",
756
+ },
757
+ request_options=request_options,
758
+ omit=OMIT,
759
+ )
760
+ try:
761
+ if 200 <= _response.status_code < 300:
762
+ _data = typing.cast(
763
+ OfferDiscoveryResponse,
764
+ parse_obj_as(
765
+ type_=OfferDiscoveryResponse, # type: ignore
766
+ object_=_response.json(),
767
+ ),
768
+ )
769
+ return AsyncHttpResponse(response=_response, data=_data)
770
+ if _response.status_code == 400:
771
+ raise BadRequestError(
772
+ headers=dict(_response.headers),
773
+ body=typing.cast(
774
+ typing.Any,
775
+ parse_obj_as(
776
+ type_=typing.Any, # type: ignore
777
+ object_=_response.json(),
778
+ ),
779
+ ),
780
+ )
781
+ if _response.status_code == 401:
782
+ raise UnauthorizedError(
783
+ headers=dict(_response.headers),
784
+ body=typing.cast(
785
+ ErrorResponse,
786
+ parse_obj_as(
787
+ type_=ErrorResponse, # type: ignore
788
+ object_=_response.json(),
789
+ ),
790
+ ),
791
+ )
792
+ if _response.status_code == 422:
793
+ raise UnprocessableEntityError(
794
+ headers=dict(_response.headers),
795
+ body=typing.cast(
796
+ typing.Any,
797
+ parse_obj_as(
798
+ type_=typing.Any, # type: ignore
799
+ object_=_response.json(),
800
+ ),
801
+ ),
802
+ )
803
+ if _response.status_code == 500:
804
+ raise InternalServerError(
805
+ headers=dict(_response.headers),
806
+ body=typing.cast(
807
+ ErrorResponse,
808
+ parse_obj_as(
809
+ type_=ErrorResponse, # type: ignore
810
+ object_=_response.json(),
811
+ ),
812
+ ),
813
+ )
814
+ _response_json = _response.json()
815
+ except JSONDecodeError:
816
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
817
+ except ValidationError as e:
818
+ raise ParsingError(
819
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
820
+ )
821
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
822
+
823
+ async def create_down_payment_details(
824
+ self,
825
+ *,
826
+ order_amount: Amount,
827
+ product_details: typing.Optional[typing.Sequence[ProductDetail]] = OMIT,
828
+ cart_coupon_discount_amount: typing.Optional[Amount] = OMIT,
829
+ issuer: typing.Optional[DownpaymentDetailsRequestIssuer] = OMIT,
830
+ request_options: typing.Optional[RequestOptions] = None,
831
+ ) -> AsyncHttpResponse[DownpaymentDetailsResponse]:
832
+ """
833
+ Retrieve applicable down payment range and EMI repayment details
834
+ based on order amount and issuer BIN.
835
+
836
+ Parameters
837
+ ----------
838
+ order_amount : Amount
839
+
840
+ product_details : typing.Optional[typing.Sequence[ProductDetail]]
841
+ Mandatory for Brand EMI. Contains product details.
842
+
843
+ cart_coupon_discount_amount : typing.Optional[Amount]
844
+
845
+ issuer : typing.Optional[DownpaymentDetailsRequestIssuer]
846
+ Issuer identification details.
847
+
848
+ request_options : typing.Optional[RequestOptions]
849
+ Request-specific configuration.
850
+
851
+ Returns
852
+ -------
853
+ AsyncHttpResponse[DownpaymentDetailsResponse]
854
+ Down payment details retrieved successfully.
855
+ """
856
+ _response = await self._client_wrapper.httpx_client.request(
857
+ "api/affordability/v1/offer/downpayment/details",
858
+ method="POST",
859
+ json={
860
+ "order_amount": convert_and_respect_annotation_metadata(
861
+ object_=order_amount, annotation=Amount, direction="write"
862
+ ),
863
+ "product_details": convert_and_respect_annotation_metadata(
864
+ object_=product_details, annotation=typing.Sequence[ProductDetail], direction="write"
865
+ ),
866
+ "cart_coupon_discount_amount": convert_and_respect_annotation_metadata(
867
+ object_=cart_coupon_discount_amount, annotation=Amount, direction="write"
868
+ ),
869
+ "issuer": convert_and_respect_annotation_metadata(
870
+ object_=issuer, annotation=DownpaymentDetailsRequestIssuer, direction="write"
871
+ ),
872
+ },
873
+ headers={
874
+ "content-type": "application/json",
875
+ },
876
+ request_options=request_options,
877
+ omit=OMIT,
878
+ )
879
+ try:
880
+ if 200 <= _response.status_code < 300:
881
+ _data = typing.cast(
882
+ DownpaymentDetailsResponse,
883
+ parse_obj_as(
884
+ type_=DownpaymentDetailsResponse, # type: ignore
885
+ object_=_response.json(),
886
+ ),
887
+ )
888
+ return AsyncHttpResponse(response=_response, data=_data)
889
+ if _response.status_code == 400:
890
+ raise BadRequestError(
891
+ headers=dict(_response.headers),
892
+ body=typing.cast(
893
+ typing.Any,
894
+ parse_obj_as(
895
+ type_=typing.Any, # type: ignore
896
+ object_=_response.json(),
897
+ ),
898
+ ),
899
+ )
900
+ if _response.status_code == 401:
901
+ raise UnauthorizedError(
902
+ headers=dict(_response.headers),
903
+ body=typing.cast(
904
+ ErrorResponse,
905
+ parse_obj_as(
906
+ type_=ErrorResponse, # type: ignore
907
+ object_=_response.json(),
908
+ ),
909
+ ),
910
+ )
911
+ if _response.status_code == 500:
912
+ raise InternalServerError(
913
+ headers=dict(_response.headers),
914
+ body=typing.cast(
915
+ ErrorResponse,
916
+ parse_obj_as(
917
+ type_=ErrorResponse, # type: ignore
918
+ object_=_response.json(),
919
+ ),
920
+ ),
921
+ )
922
+ _response_json = _response.json()
923
+ except JSONDecodeError:
924
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
925
+ except ValidationError as e:
926
+ raise ParsingError(
927
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
928
+ )
929
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
930
+
931
+ async def offer_validation_create(
932
+ self,
933
+ *,
934
+ payment_method: str,
935
+ order_amount: OfferValidationRequestOrderAmount,
936
+ payment_amount: OfferValidationRequestPaymentAmount,
937
+ payment_option: OfferValidationRequestPaymentOption,
938
+ offer_data: OfferValidationRequestOfferData,
939
+ accept_encoding: typing.Optional[str] = None,
940
+ customer_details: typing.Optional[OfferValidationRequestCustomerDetails] = OMIT,
941
+ request_options: typing.Optional[RequestOptions] = None,
942
+ ) -> AsyncHttpResponse[OfferValidationResponse]:
943
+ """
944
+ Use this API for validating applied offers.
945
+
946
+ Parameters
947
+ ----------
948
+ payment_method : str
949
+ Type of payment method you want to use to accept a payment.<br><br>Accepted values:<ul><li>`CREDIT_EMI`</li><li>`DEBIT_EMI`</li><li>`CARDLESS_EMI`</ul></li>
950
+
951
+ order_amount : OfferValidationRequestOrderAmount
952
+ An object that contains order amount.
953
+
954
+ payment_amount : OfferValidationRequestPaymentAmount
955
+ An object that contains the payment amount details after the offer has been applied.<br><br>**Note**: Ensure you pass the `auth_amount` details. This `auth_amount` detail is returned through our Offer Discovery API response.
956
+
957
+ payment_option : OfferValidationRequestPaymentOption
958
+ An object that contains the details of the payment options.<br><br>You can use either `card_details` or `card_token_details` or `cardless_details` as a payment option. One object is mandatory to process the request.
959
+
960
+ offer_data : OfferValidationRequestOfferData
961
+ An object that contains details related to the offer.
962
+
963
+ accept_encoding : typing.Optional[str]
964
+ Type of content-encoding supported.<br><br>Accepted value: `gzip`
965
+
966
+ customer_details : typing.Optional[OfferValidationRequestCustomerDetails]
967
+ An object that contains details related to the customer.
968
+
969
+ request_options : typing.Optional[RequestOptions]
970
+ Request-specific configuration.
971
+
972
+ Returns
973
+ -------
974
+ AsyncHttpResponse[OfferValidationResponse]
975
+ 200
976
+ """
977
+ _response = await self._client_wrapper.httpx_client.request(
978
+ "api/affordability/v1/offer/validate",
979
+ method="POST",
980
+ json={
981
+ "payment_method": payment_method,
982
+ "order_amount": convert_and_respect_annotation_metadata(
983
+ object_=order_amount, annotation=OfferValidationRequestOrderAmount, direction="write"
984
+ ),
985
+ "payment_amount": convert_and_respect_annotation_metadata(
986
+ object_=payment_amount, annotation=OfferValidationRequestPaymentAmount, direction="write"
987
+ ),
988
+ "payment_option": convert_and_respect_annotation_metadata(
989
+ object_=payment_option, annotation=OfferValidationRequestPaymentOption, direction="write"
990
+ ),
991
+ "offer_data": convert_and_respect_annotation_metadata(
992
+ object_=offer_data, annotation=OfferValidationRequestOfferData, direction="write"
993
+ ),
994
+ "customer_details": convert_and_respect_annotation_metadata(
995
+ object_=customer_details, annotation=OfferValidationRequestCustomerDetails, direction="write"
996
+ ),
997
+ },
998
+ headers={
999
+ "content-type": "application/json",
1000
+ "Accept-Encoding": str(accept_encoding) if accept_encoding is not None else None,
1001
+ },
1002
+ request_options=request_options,
1003
+ omit=OMIT,
1004
+ )
1005
+ try:
1006
+ if 200 <= _response.status_code < 300:
1007
+ _data = typing.cast(
1008
+ OfferValidationResponse,
1009
+ parse_obj_as(
1010
+ type_=OfferValidationResponse, # type: ignore
1011
+ object_=_response.json(),
1012
+ ),
1013
+ )
1014
+ return AsyncHttpResponse(response=_response, data=_data)
1015
+ if _response.status_code == 400:
1016
+ raise BadRequestError(
1017
+ headers=dict(_response.headers),
1018
+ body=typing.cast(
1019
+ typing.Any,
1020
+ parse_obj_as(
1021
+ type_=typing.Any, # type: ignore
1022
+ object_=_response.json(),
1023
+ ),
1024
+ ),
1025
+ )
1026
+ _response_json = _response.json()
1027
+ except JSONDecodeError:
1028
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1029
+ except ValidationError as e:
1030
+ raise ParsingError(
1031
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1032
+ )
1033
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1034
+
1035
+ async def create_imei_validation(
1036
+ self,
1037
+ order_id: str,
1038
+ *,
1039
+ merchant_product_imei_reference: str,
1040
+ request_type: ImeiValidationRequestRequestType,
1041
+ products: typing.Sequence[ImeiProduct],
1042
+ request_options: typing.Optional[RequestOptions] = None,
1043
+ ) -> AsyncHttpResponse[None]:
1044
+ """
1045
+ Validate or block/unblock IMEI numbers for Brand EMI transactions.
1046
+ Used to confirm the device is eligible for the selected EMI program.
1047
+
1048
+ Parameters
1049
+ ----------
1050
+ order_id : str
1051
+ Unique Pine Labs order identifier.
1052
+
1053
+ merchant_product_imei_reference : str
1054
+ **Idempotency Key.** Merchant product IMEI reference. Duplicate requests with the same `merchant_product_imei_reference` will return the existing result instead of creating a new one.
1055
+
1056
+ request_type : ImeiValidationRequestRequestType
1057
+ IMEI request type.
1058
+
1059
+ products : typing.Sequence[ImeiProduct]
1060
+ Array of product details for IMEI validation.
1061
+
1062
+ request_options : typing.Optional[RequestOptions]
1063
+ Request-specific configuration.
1064
+
1065
+ Returns
1066
+ -------
1067
+ AsyncHttpResponse[None]
1068
+ """
1069
+ _response = await self._client_wrapper.httpx_client.request(
1070
+ f"api/affordability/v1/product/{encode_path_param(order_id)}/imei",
1071
+ method="POST",
1072
+ json={
1073
+ "merchant_product_imei_reference": merchant_product_imei_reference,
1074
+ "request_type": request_type,
1075
+ "products": convert_and_respect_annotation_metadata(
1076
+ object_=products, annotation=typing.Sequence[ImeiProduct], direction="write"
1077
+ ),
1078
+ },
1079
+ headers={
1080
+ "content-type": "application/json",
1081
+ },
1082
+ request_options=request_options,
1083
+ omit=OMIT,
1084
+ )
1085
+ try:
1086
+ if 200 <= _response.status_code < 300:
1087
+ return AsyncHttpResponse(response=_response, data=None)
1088
+ _response_json = _response.json()
1089
+ except JSONDecodeError:
1090
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1091
+ except ValidationError as e:
1092
+ raise ParsingError(
1093
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1094
+ )
1095
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)