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,1111 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+ from json.decoder import JSONDecodeError
6
+
7
+ from ..core.api_error import ApiError
8
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
+ from ..core.datetime_utils import serialize_datetime
10
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
11
+ from ..core.jsonable_encoder import encode_path_param
12
+ from ..core.parse_error import ParsingError
13
+ from ..core.pydantic_utilities import parse_obj_as
14
+ from ..core.request_options import RequestOptions
15
+ from ..core.serialization import convert_and_respect_annotation_metadata
16
+ from ..errors.bad_request_error import BadRequestError
17
+ from ..errors.internal_server_error import InternalServerError
18
+ from ..errors.not_found_error import NotFoundError
19
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
20
+ from ..types.error_response import ErrorResponse
21
+ from ..types.list_plans_response import ListPlansResponse
22
+ from ..types.plan_response import PlanResponse
23
+ from ..types.subscription_amount import SubscriptionAmount
24
+ from .types.create_plan_request_frequency import CreatePlanRequestFrequency
25
+ from .types.list_plans_request_amount_range import ListPlansRequestAmountRange
26
+ from pydantic import ValidationError
27
+
28
+ # this is used as the default value for optional parameters
29
+ OMIT = typing.cast(typing.Any, ...)
30
+
31
+
32
+ class RawSubscriptionsPlansClient:
33
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
34
+ self._client_wrapper = client_wrapper
35
+
36
+ def list_plans(
37
+ self,
38
+ *,
39
+ plan_id: typing.Optional[str] = None,
40
+ start_date: typing.Optional[dt.datetime] = None,
41
+ end_date: typing.Optional[dt.datetime] = None,
42
+ amount: typing.Optional[int] = None,
43
+ amount_range: typing.Optional[ListPlansRequestAmountRange] = None,
44
+ frequency: typing.Optional[str] = None,
45
+ size: typing.Optional[int] = None,
46
+ page: typing.Optional[int] = None,
47
+ sort: typing.Optional[str] = None,
48
+ request_options: typing.Optional[RequestOptions] = None,
49
+ ) -> HttpResponse[ListPlansResponse]:
50
+ """
51
+ Retrieves all subscription plans. Supports filtering by plan_id,
52
+ date range, amount, frequency, and pagination.
53
+
54
+ Parameters
55
+ ----------
56
+ plan_id : typing.Optional[str]
57
+ Filter by plan ID.
58
+
59
+ start_date : typing.Optional[dt.datetime]
60
+ Filter plans with start date after this value (ISO 8601 UTC).
61
+
62
+ end_date : typing.Optional[dt.datetime]
63
+ Filter plans with end date before this value (ISO 8601 UTC).
64
+
65
+ amount : typing.Optional[int]
66
+ Filter by amount value.
67
+
68
+ amount_range : typing.Optional[ListPlansRequestAmountRange]
69
+ Amount comparison operator.
70
+
71
+ frequency : typing.Optional[str]
72
+ Filter by billing frequency.
73
+
74
+ size : typing.Optional[int]
75
+ Number of items per page.
76
+
77
+ page : typing.Optional[int]
78
+ Page number.
79
+
80
+ sort : typing.Optional[str]
81
+ Sort field and direction.
82
+
83
+ request_options : typing.Optional[RequestOptions]
84
+ Request-specific configuration.
85
+
86
+ Returns
87
+ -------
88
+ HttpResponse[ListPlansResponse]
89
+ Plans retrieved successfully.
90
+ """
91
+ _response = self._client_wrapper.httpx_client.request(
92
+ "ps/api/v1/public/plans",
93
+ method="GET",
94
+ params={
95
+ "plan_id": plan_id,
96
+ "start_date": serialize_datetime(start_date) if start_date is not None else None,
97
+ "end_date": serialize_datetime(end_date) if end_date is not None else None,
98
+ "amount": amount,
99
+ "amount_range": amount_range,
100
+ "frequency": frequency,
101
+ "size": size,
102
+ "page": page,
103
+ "sort": sort,
104
+ },
105
+ request_options=request_options,
106
+ )
107
+ try:
108
+ if 200 <= _response.status_code < 300:
109
+ _data = typing.cast(
110
+ ListPlansResponse,
111
+ parse_obj_as(
112
+ type_=ListPlansResponse, # type: ignore
113
+ object_=_response.json(),
114
+ ),
115
+ )
116
+ return HttpResponse(response=_response, data=_data)
117
+ if _response.status_code == 500:
118
+ raise InternalServerError(
119
+ headers=dict(_response.headers),
120
+ body=typing.cast(
121
+ ErrorResponse,
122
+ parse_obj_as(
123
+ type_=ErrorResponse, # type: ignore
124
+ object_=_response.json(),
125
+ ),
126
+ ),
127
+ )
128
+ _response_json = _response.json()
129
+ except JSONDecodeError:
130
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
131
+ except ValidationError as e:
132
+ raise ParsingError(
133
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
134
+ )
135
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
136
+
137
+ def create_plan(
138
+ self,
139
+ *,
140
+ plan_name: str,
141
+ frequency: CreatePlanRequestFrequency,
142
+ amount: SubscriptionAmount,
143
+ max_limit_amount: SubscriptionAmount,
144
+ end_date: dt.datetime,
145
+ merchant_plan_reference: str,
146
+ plan_description: typing.Optional[str] = OMIT,
147
+ initial_debit_amount: typing.Optional[SubscriptionAmount] = OMIT,
148
+ trial_period_in_days: typing.Optional[int] = OMIT,
149
+ start_date: typing.Optional[dt.datetime] = OMIT,
150
+ merchant_metadata: typing.Optional[typing.Dict[str, str]] = OMIT,
151
+ auto_debit_ot: typing.Optional[str] = OMIT,
152
+ request_options: typing.Optional[RequestOptions] = None,
153
+ ) -> HttpResponse[PlanResponse]:
154
+ """
155
+ Creates a new subscription plan that serves as a reusable template
156
+ defining the pricing structure, billing frequency, and payment terms.
157
+ Plans must be created before subscriptions can be set up.
158
+
159
+ Parameters
160
+ ----------
161
+ plan_name : str
162
+ Subscription plan name.
163
+
164
+ frequency : CreatePlanRequestFrequency
165
+ Frequency of recurring transactions for this particular plan.
166
+
167
+ amount : SubscriptionAmount
168
+
169
+ max_limit_amount : SubscriptionAmount
170
+
171
+ end_date : dt.datetime
172
+ The ISO 8601 UTC Timestamp when the subscription plan expires.
173
+
174
+ merchant_plan_reference : str
175
+ **Idempotency Key.** Unique identifier of the merchant plan reference. Duplicate requests with the same `merchant_plan_reference` will return the existing plan instead of creating a new one.
176
+
177
+ plan_description : typing.Optional[str]
178
+ Corresponding description for a plan.
179
+
180
+ initial_debit_amount : typing.Optional[SubscriptionAmount]
181
+
182
+ trial_period_in_days : typing.Optional[int]
183
+ Duration of the trial period in days.
184
+
185
+ start_date : typing.Optional[dt.datetime]
186
+ The ISO 8601 UTC Timestamp when the subscription plan is active and available for use.
187
+
188
+ merchant_metadata : typing.Optional[typing.Dict[str, str]]
189
+ Key-value pairs for additional information. Max 10 pairs, 256 chars each.
190
+
191
+ auto_debit_ot : typing.Optional[str]
192
+ Indicates whether auto-debit is enabled for one-time payments under the subscription plan.
193
+
194
+ request_options : typing.Optional[RequestOptions]
195
+ Request-specific configuration.
196
+
197
+ Returns
198
+ -------
199
+ HttpResponse[PlanResponse]
200
+ Plan created successfully.
201
+ """
202
+ _response = self._client_wrapper.httpx_client.request(
203
+ "ps/api/v1/public/plans",
204
+ method="POST",
205
+ json={
206
+ "plan_name": plan_name,
207
+ "plan_description": plan_description,
208
+ "frequency": frequency,
209
+ "amount": convert_and_respect_annotation_metadata(
210
+ object_=amount, annotation=SubscriptionAmount, direction="write"
211
+ ),
212
+ "max_limit_amount": convert_and_respect_annotation_metadata(
213
+ object_=max_limit_amount, annotation=SubscriptionAmount, direction="write"
214
+ ),
215
+ "initial_debit_amount": convert_and_respect_annotation_metadata(
216
+ object_=initial_debit_amount, annotation=SubscriptionAmount, direction="write"
217
+ ),
218
+ "trial_period_in_days": trial_period_in_days,
219
+ "start_date": start_date,
220
+ "end_date": end_date,
221
+ "merchant_metadata": merchant_metadata,
222
+ "merchant_plan_reference": merchant_plan_reference,
223
+ "auto_debit_ot": auto_debit_ot,
224
+ },
225
+ headers={
226
+ "content-type": "application/json",
227
+ },
228
+ request_options=request_options,
229
+ omit=OMIT,
230
+ )
231
+ try:
232
+ if 200 <= _response.status_code < 300:
233
+ _data = typing.cast(
234
+ PlanResponse,
235
+ parse_obj_as(
236
+ type_=PlanResponse, # type: ignore
237
+ object_=_response.json(),
238
+ ),
239
+ )
240
+ return HttpResponse(response=_response, data=_data)
241
+ if _response.status_code == 400:
242
+ raise BadRequestError(
243
+ headers=dict(_response.headers),
244
+ body=typing.cast(
245
+ typing.Any,
246
+ parse_obj_as(
247
+ type_=typing.Any, # type: ignore
248
+ object_=_response.json(),
249
+ ),
250
+ ),
251
+ )
252
+ if _response.status_code == 422:
253
+ raise UnprocessableEntityError(
254
+ headers=dict(_response.headers),
255
+ body=typing.cast(
256
+ typing.Any,
257
+ parse_obj_as(
258
+ type_=typing.Any, # type: ignore
259
+ object_=_response.json(),
260
+ ),
261
+ ),
262
+ )
263
+ if _response.status_code == 500:
264
+ raise InternalServerError(
265
+ headers=dict(_response.headers),
266
+ body=typing.cast(
267
+ ErrorResponse,
268
+ parse_obj_as(
269
+ type_=ErrorResponse, # type: ignore
270
+ object_=_response.json(),
271
+ ),
272
+ ),
273
+ )
274
+ _response_json = _response.json()
275
+ except JSONDecodeError:
276
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
277
+ except ValidationError as e:
278
+ raise ParsingError(
279
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
280
+ )
281
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
282
+
283
+ def get_plan_by_id(
284
+ self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None
285
+ ) -> HttpResponse[PlanResponse]:
286
+ """
287
+ Retrieves a specific subscription plan by its plan ID.
288
+
289
+ Parameters
290
+ ----------
291
+ plan_id : str
292
+ Unique identifier for the subscription plan.
293
+
294
+ request_options : typing.Optional[RequestOptions]
295
+ Request-specific configuration.
296
+
297
+ Returns
298
+ -------
299
+ HttpResponse[PlanResponse]
300
+ Plan retrieved successfully.
301
+ """
302
+ _response = self._client_wrapper.httpx_client.request(
303
+ f"ps/api/v1/public/plans/{encode_path_param(plan_id)}",
304
+ method="GET",
305
+ request_options=request_options,
306
+ )
307
+ try:
308
+ if 200 <= _response.status_code < 300:
309
+ _data = typing.cast(
310
+ PlanResponse,
311
+ parse_obj_as(
312
+ type_=PlanResponse, # type: ignore
313
+ object_=_response.json(),
314
+ ),
315
+ )
316
+ return HttpResponse(response=_response, data=_data)
317
+ if _response.status_code == 404:
318
+ raise NotFoundError(
319
+ headers=dict(_response.headers),
320
+ body=typing.cast(
321
+ ErrorResponse,
322
+ parse_obj_as(
323
+ type_=ErrorResponse, # type: ignore
324
+ object_=_response.json(),
325
+ ),
326
+ ),
327
+ )
328
+ if _response.status_code == 500:
329
+ raise InternalServerError(
330
+ headers=dict(_response.headers),
331
+ body=typing.cast(
332
+ ErrorResponse,
333
+ parse_obj_as(
334
+ type_=ErrorResponse, # type: ignore
335
+ object_=_response.json(),
336
+ ),
337
+ ),
338
+ )
339
+ _response_json = _response.json()
340
+ except JSONDecodeError:
341
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
342
+ except ValidationError as e:
343
+ raise ParsingError(
344
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
345
+ )
346
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
347
+
348
+ def delete_plan(
349
+ self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None
350
+ ) -> HttpResponse[None]:
351
+ """
352
+ Deletes a subscription plan by its plan ID.
353
+
354
+ Parameters
355
+ ----------
356
+ plan_id : str
357
+ Unique identifier for the subscription plan.
358
+
359
+ request_options : typing.Optional[RequestOptions]
360
+ Request-specific configuration.
361
+
362
+ Returns
363
+ -------
364
+ HttpResponse[None]
365
+ """
366
+ _response = self._client_wrapper.httpx_client.request(
367
+ f"ps/api/v1/public/plans/{encode_path_param(plan_id)}",
368
+ method="DELETE",
369
+ request_options=request_options,
370
+ )
371
+ try:
372
+ if 200 <= _response.status_code < 300:
373
+ return HttpResponse(response=_response, data=None)
374
+ if _response.status_code == 404:
375
+ raise NotFoundError(
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 update_plan(
406
+ self,
407
+ plan_id: str,
408
+ *,
409
+ plan_name: typing.Optional[str] = OMIT,
410
+ plan_description: typing.Optional[str] = OMIT,
411
+ amount: typing.Optional[SubscriptionAmount] = OMIT,
412
+ max_limit_amount: typing.Optional[SubscriptionAmount] = OMIT,
413
+ trial_period_in_days: typing.Optional[int] = OMIT,
414
+ end_date: typing.Optional[dt.datetime] = OMIT,
415
+ merchant_metadata: typing.Optional[typing.Dict[str, str]] = OMIT,
416
+ request_options: typing.Optional[RequestOptions] = None,
417
+ ) -> HttpResponse[PlanResponse]:
418
+ """
419
+ Updates an existing subscription plan. Existing subscriptions under
420
+ this plan will remain unaffected. The changes will apply only to
421
+ new subscriptions created under this plan.
422
+
423
+ Parameters
424
+ ----------
425
+ plan_id : str
426
+ Unique identifier for the subscription plan.
427
+
428
+ plan_name : typing.Optional[str]
429
+ Subscription plan name.
430
+
431
+ plan_description : typing.Optional[str]
432
+ Corresponding description for a plan.
433
+
434
+ amount : typing.Optional[SubscriptionAmount]
435
+
436
+ max_limit_amount : typing.Optional[SubscriptionAmount]
437
+
438
+ trial_period_in_days : typing.Optional[int]
439
+ Duration of the trial period in days.
440
+
441
+ end_date : typing.Optional[dt.datetime]
442
+ The ISO 8601 UTC Timestamp when the subscription plan expires.
443
+
444
+ merchant_metadata : typing.Optional[typing.Dict[str, str]]
445
+ Key-value pairs for additional information. Max 10 pairs, 256 chars each.
446
+
447
+ request_options : typing.Optional[RequestOptions]
448
+ Request-specific configuration.
449
+
450
+ Returns
451
+ -------
452
+ HttpResponse[PlanResponse]
453
+ Plan updated successfully.
454
+ """
455
+ _response = self._client_wrapper.httpx_client.request(
456
+ f"ps/api/v1/public/plans/{encode_path_param(plan_id)}",
457
+ method="PATCH",
458
+ json={
459
+ "plan_name": plan_name,
460
+ "plan_description": plan_description,
461
+ "amount": convert_and_respect_annotation_metadata(
462
+ object_=amount, annotation=SubscriptionAmount, direction="write"
463
+ ),
464
+ "max_limit_amount": convert_and_respect_annotation_metadata(
465
+ object_=max_limit_amount, annotation=SubscriptionAmount, direction="write"
466
+ ),
467
+ "trial_period_in_days": trial_period_in_days,
468
+ "end_date": end_date,
469
+ "merchant_metadata": merchant_metadata,
470
+ },
471
+ headers={
472
+ "content-type": "application/json",
473
+ },
474
+ request_options=request_options,
475
+ omit=OMIT,
476
+ )
477
+ try:
478
+ if 200 <= _response.status_code < 300:
479
+ _data = typing.cast(
480
+ PlanResponse,
481
+ parse_obj_as(
482
+ type_=PlanResponse, # type: ignore
483
+ object_=_response.json(),
484
+ ),
485
+ )
486
+ return HttpResponse(response=_response, data=_data)
487
+ if _response.status_code == 400:
488
+ raise BadRequestError(
489
+ headers=dict(_response.headers),
490
+ body=typing.cast(
491
+ typing.Any,
492
+ parse_obj_as(
493
+ type_=typing.Any, # type: ignore
494
+ object_=_response.json(),
495
+ ),
496
+ ),
497
+ )
498
+ _response_json = _response.json()
499
+ except JSONDecodeError:
500
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
501
+ except ValidationError as e:
502
+ raise ParsingError(
503
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
504
+ )
505
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
506
+
507
+ def get_plan_by_merchant_reference(
508
+ self, merchant_plan_reference: str, *, request_options: typing.Optional[RequestOptions] = None
509
+ ) -> HttpResponse[PlanResponse]:
510
+ """
511
+ Retrieves a specific subscription plan by the merchant plan reference.
512
+
513
+ Parameters
514
+ ----------
515
+ merchant_plan_reference : str
516
+ Unique identifier of the merchant plan reference.
517
+
518
+ request_options : typing.Optional[RequestOptions]
519
+ Request-specific configuration.
520
+
521
+ Returns
522
+ -------
523
+ HttpResponse[PlanResponse]
524
+ Plan retrieved successfully.
525
+ """
526
+ _response = self._client_wrapper.httpx_client.request(
527
+ f"ps/api/v1/public/plans/reference/{encode_path_param(merchant_plan_reference)}",
528
+ method="GET",
529
+ request_options=request_options,
530
+ )
531
+ try:
532
+ if 200 <= _response.status_code < 300:
533
+ _data = typing.cast(
534
+ PlanResponse,
535
+ parse_obj_as(
536
+ type_=PlanResponse, # type: ignore
537
+ object_=_response.json(),
538
+ ),
539
+ )
540
+ return HttpResponse(response=_response, data=_data)
541
+ if _response.status_code == 404:
542
+ raise NotFoundError(
543
+ headers=dict(_response.headers),
544
+ body=typing.cast(
545
+ ErrorResponse,
546
+ parse_obj_as(
547
+ type_=ErrorResponse, # type: ignore
548
+ object_=_response.json(),
549
+ ),
550
+ ),
551
+ )
552
+ if _response.status_code == 500:
553
+ raise InternalServerError(
554
+ headers=dict(_response.headers),
555
+ body=typing.cast(
556
+ ErrorResponse,
557
+ parse_obj_as(
558
+ type_=ErrorResponse, # type: ignore
559
+ object_=_response.json(),
560
+ ),
561
+ ),
562
+ )
563
+ _response_json = _response.json()
564
+ except JSONDecodeError:
565
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
566
+ except ValidationError as e:
567
+ raise ParsingError(
568
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
569
+ )
570
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
571
+
572
+
573
+ class AsyncRawSubscriptionsPlansClient:
574
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
575
+ self._client_wrapper = client_wrapper
576
+
577
+ async def list_plans(
578
+ self,
579
+ *,
580
+ plan_id: typing.Optional[str] = None,
581
+ start_date: typing.Optional[dt.datetime] = None,
582
+ end_date: typing.Optional[dt.datetime] = None,
583
+ amount: typing.Optional[int] = None,
584
+ amount_range: typing.Optional[ListPlansRequestAmountRange] = None,
585
+ frequency: typing.Optional[str] = None,
586
+ size: typing.Optional[int] = None,
587
+ page: typing.Optional[int] = None,
588
+ sort: typing.Optional[str] = None,
589
+ request_options: typing.Optional[RequestOptions] = None,
590
+ ) -> AsyncHttpResponse[ListPlansResponse]:
591
+ """
592
+ Retrieves all subscription plans. Supports filtering by plan_id,
593
+ date range, amount, frequency, and pagination.
594
+
595
+ Parameters
596
+ ----------
597
+ plan_id : typing.Optional[str]
598
+ Filter by plan ID.
599
+
600
+ start_date : typing.Optional[dt.datetime]
601
+ Filter plans with start date after this value (ISO 8601 UTC).
602
+
603
+ end_date : typing.Optional[dt.datetime]
604
+ Filter plans with end date before this value (ISO 8601 UTC).
605
+
606
+ amount : typing.Optional[int]
607
+ Filter by amount value.
608
+
609
+ amount_range : typing.Optional[ListPlansRequestAmountRange]
610
+ Amount comparison operator.
611
+
612
+ frequency : typing.Optional[str]
613
+ Filter by billing frequency.
614
+
615
+ size : typing.Optional[int]
616
+ Number of items per page.
617
+
618
+ page : typing.Optional[int]
619
+ Page number.
620
+
621
+ sort : typing.Optional[str]
622
+ Sort field and direction.
623
+
624
+ request_options : typing.Optional[RequestOptions]
625
+ Request-specific configuration.
626
+
627
+ Returns
628
+ -------
629
+ AsyncHttpResponse[ListPlansResponse]
630
+ Plans retrieved successfully.
631
+ """
632
+ _response = await self._client_wrapper.httpx_client.request(
633
+ "ps/api/v1/public/plans",
634
+ method="GET",
635
+ params={
636
+ "plan_id": plan_id,
637
+ "start_date": serialize_datetime(start_date) if start_date is not None else None,
638
+ "end_date": serialize_datetime(end_date) if end_date is not None else None,
639
+ "amount": amount,
640
+ "amount_range": amount_range,
641
+ "frequency": frequency,
642
+ "size": size,
643
+ "page": page,
644
+ "sort": sort,
645
+ },
646
+ request_options=request_options,
647
+ )
648
+ try:
649
+ if 200 <= _response.status_code < 300:
650
+ _data = typing.cast(
651
+ ListPlansResponse,
652
+ parse_obj_as(
653
+ type_=ListPlansResponse, # type: ignore
654
+ object_=_response.json(),
655
+ ),
656
+ )
657
+ return AsyncHttpResponse(response=_response, data=_data)
658
+ if _response.status_code == 500:
659
+ raise InternalServerError(
660
+ headers=dict(_response.headers),
661
+ body=typing.cast(
662
+ ErrorResponse,
663
+ parse_obj_as(
664
+ type_=ErrorResponse, # type: ignore
665
+ object_=_response.json(),
666
+ ),
667
+ ),
668
+ )
669
+ _response_json = _response.json()
670
+ except JSONDecodeError:
671
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
672
+ except ValidationError as e:
673
+ raise ParsingError(
674
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
675
+ )
676
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
677
+
678
+ async def create_plan(
679
+ self,
680
+ *,
681
+ plan_name: str,
682
+ frequency: CreatePlanRequestFrequency,
683
+ amount: SubscriptionAmount,
684
+ max_limit_amount: SubscriptionAmount,
685
+ end_date: dt.datetime,
686
+ merchant_plan_reference: str,
687
+ plan_description: typing.Optional[str] = OMIT,
688
+ initial_debit_amount: typing.Optional[SubscriptionAmount] = OMIT,
689
+ trial_period_in_days: typing.Optional[int] = OMIT,
690
+ start_date: typing.Optional[dt.datetime] = OMIT,
691
+ merchant_metadata: typing.Optional[typing.Dict[str, str]] = OMIT,
692
+ auto_debit_ot: typing.Optional[str] = OMIT,
693
+ request_options: typing.Optional[RequestOptions] = None,
694
+ ) -> AsyncHttpResponse[PlanResponse]:
695
+ """
696
+ Creates a new subscription plan that serves as a reusable template
697
+ defining the pricing structure, billing frequency, and payment terms.
698
+ Plans must be created before subscriptions can be set up.
699
+
700
+ Parameters
701
+ ----------
702
+ plan_name : str
703
+ Subscription plan name.
704
+
705
+ frequency : CreatePlanRequestFrequency
706
+ Frequency of recurring transactions for this particular plan.
707
+
708
+ amount : SubscriptionAmount
709
+
710
+ max_limit_amount : SubscriptionAmount
711
+
712
+ end_date : dt.datetime
713
+ The ISO 8601 UTC Timestamp when the subscription plan expires.
714
+
715
+ merchant_plan_reference : str
716
+ **Idempotency Key.** Unique identifier of the merchant plan reference. Duplicate requests with the same `merchant_plan_reference` will return the existing plan instead of creating a new one.
717
+
718
+ plan_description : typing.Optional[str]
719
+ Corresponding description for a plan.
720
+
721
+ initial_debit_amount : typing.Optional[SubscriptionAmount]
722
+
723
+ trial_period_in_days : typing.Optional[int]
724
+ Duration of the trial period in days.
725
+
726
+ start_date : typing.Optional[dt.datetime]
727
+ The ISO 8601 UTC Timestamp when the subscription plan is active and available for use.
728
+
729
+ merchant_metadata : typing.Optional[typing.Dict[str, str]]
730
+ Key-value pairs for additional information. Max 10 pairs, 256 chars each.
731
+
732
+ auto_debit_ot : typing.Optional[str]
733
+ Indicates whether auto-debit is enabled for one-time payments under the subscription plan.
734
+
735
+ request_options : typing.Optional[RequestOptions]
736
+ Request-specific configuration.
737
+
738
+ Returns
739
+ -------
740
+ AsyncHttpResponse[PlanResponse]
741
+ Plan created successfully.
742
+ """
743
+ _response = await self._client_wrapper.httpx_client.request(
744
+ "ps/api/v1/public/plans",
745
+ method="POST",
746
+ json={
747
+ "plan_name": plan_name,
748
+ "plan_description": plan_description,
749
+ "frequency": frequency,
750
+ "amount": convert_and_respect_annotation_metadata(
751
+ object_=amount, annotation=SubscriptionAmount, direction="write"
752
+ ),
753
+ "max_limit_amount": convert_and_respect_annotation_metadata(
754
+ object_=max_limit_amount, annotation=SubscriptionAmount, direction="write"
755
+ ),
756
+ "initial_debit_amount": convert_and_respect_annotation_metadata(
757
+ object_=initial_debit_amount, annotation=SubscriptionAmount, direction="write"
758
+ ),
759
+ "trial_period_in_days": trial_period_in_days,
760
+ "start_date": start_date,
761
+ "end_date": end_date,
762
+ "merchant_metadata": merchant_metadata,
763
+ "merchant_plan_reference": merchant_plan_reference,
764
+ "auto_debit_ot": auto_debit_ot,
765
+ },
766
+ headers={
767
+ "content-type": "application/json",
768
+ },
769
+ request_options=request_options,
770
+ omit=OMIT,
771
+ )
772
+ try:
773
+ if 200 <= _response.status_code < 300:
774
+ _data = typing.cast(
775
+ PlanResponse,
776
+ parse_obj_as(
777
+ type_=PlanResponse, # type: ignore
778
+ object_=_response.json(),
779
+ ),
780
+ )
781
+ return AsyncHttpResponse(response=_response, data=_data)
782
+ if _response.status_code == 400:
783
+ raise BadRequestError(
784
+ headers=dict(_response.headers),
785
+ body=typing.cast(
786
+ typing.Any,
787
+ parse_obj_as(
788
+ type_=typing.Any, # type: ignore
789
+ object_=_response.json(),
790
+ ),
791
+ ),
792
+ )
793
+ if _response.status_code == 422:
794
+ raise UnprocessableEntityError(
795
+ headers=dict(_response.headers),
796
+ body=typing.cast(
797
+ typing.Any,
798
+ parse_obj_as(
799
+ type_=typing.Any, # type: ignore
800
+ object_=_response.json(),
801
+ ),
802
+ ),
803
+ )
804
+ if _response.status_code == 500:
805
+ raise InternalServerError(
806
+ headers=dict(_response.headers),
807
+ body=typing.cast(
808
+ ErrorResponse,
809
+ parse_obj_as(
810
+ type_=ErrorResponse, # type: ignore
811
+ object_=_response.json(),
812
+ ),
813
+ ),
814
+ )
815
+ _response_json = _response.json()
816
+ except JSONDecodeError:
817
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
818
+ except ValidationError as e:
819
+ raise ParsingError(
820
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
821
+ )
822
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
823
+
824
+ async def get_plan_by_id(
825
+ self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None
826
+ ) -> AsyncHttpResponse[PlanResponse]:
827
+ """
828
+ Retrieves a specific subscription plan by its plan ID.
829
+
830
+ Parameters
831
+ ----------
832
+ plan_id : str
833
+ Unique identifier for the subscription plan.
834
+
835
+ request_options : typing.Optional[RequestOptions]
836
+ Request-specific configuration.
837
+
838
+ Returns
839
+ -------
840
+ AsyncHttpResponse[PlanResponse]
841
+ Plan retrieved successfully.
842
+ """
843
+ _response = await self._client_wrapper.httpx_client.request(
844
+ f"ps/api/v1/public/plans/{encode_path_param(plan_id)}",
845
+ method="GET",
846
+ request_options=request_options,
847
+ )
848
+ try:
849
+ if 200 <= _response.status_code < 300:
850
+ _data = typing.cast(
851
+ PlanResponse,
852
+ parse_obj_as(
853
+ type_=PlanResponse, # type: ignore
854
+ object_=_response.json(),
855
+ ),
856
+ )
857
+ return AsyncHttpResponse(response=_response, data=_data)
858
+ if _response.status_code == 404:
859
+ raise NotFoundError(
860
+ headers=dict(_response.headers),
861
+ body=typing.cast(
862
+ ErrorResponse,
863
+ parse_obj_as(
864
+ type_=ErrorResponse, # type: ignore
865
+ object_=_response.json(),
866
+ ),
867
+ ),
868
+ )
869
+ if _response.status_code == 500:
870
+ raise InternalServerError(
871
+ headers=dict(_response.headers),
872
+ body=typing.cast(
873
+ ErrorResponse,
874
+ parse_obj_as(
875
+ type_=ErrorResponse, # type: ignore
876
+ object_=_response.json(),
877
+ ),
878
+ ),
879
+ )
880
+ _response_json = _response.json()
881
+ except JSONDecodeError:
882
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
883
+ except ValidationError as e:
884
+ raise ParsingError(
885
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
886
+ )
887
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
888
+
889
+ async def delete_plan(
890
+ self, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None
891
+ ) -> AsyncHttpResponse[None]:
892
+ """
893
+ Deletes a subscription plan by its plan ID.
894
+
895
+ Parameters
896
+ ----------
897
+ plan_id : str
898
+ Unique identifier for the subscription plan.
899
+
900
+ request_options : typing.Optional[RequestOptions]
901
+ Request-specific configuration.
902
+
903
+ Returns
904
+ -------
905
+ AsyncHttpResponse[None]
906
+ """
907
+ _response = await self._client_wrapper.httpx_client.request(
908
+ f"ps/api/v1/public/plans/{encode_path_param(plan_id)}",
909
+ method="DELETE",
910
+ request_options=request_options,
911
+ )
912
+ try:
913
+ if 200 <= _response.status_code < 300:
914
+ return AsyncHttpResponse(response=_response, data=None)
915
+ if _response.status_code == 404:
916
+ raise NotFoundError(
917
+ headers=dict(_response.headers),
918
+ body=typing.cast(
919
+ ErrorResponse,
920
+ parse_obj_as(
921
+ type_=ErrorResponse, # type: ignore
922
+ object_=_response.json(),
923
+ ),
924
+ ),
925
+ )
926
+ if _response.status_code == 500:
927
+ raise InternalServerError(
928
+ headers=dict(_response.headers),
929
+ body=typing.cast(
930
+ ErrorResponse,
931
+ parse_obj_as(
932
+ type_=ErrorResponse, # type: ignore
933
+ object_=_response.json(),
934
+ ),
935
+ ),
936
+ )
937
+ _response_json = _response.json()
938
+ except JSONDecodeError:
939
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
940
+ except ValidationError as e:
941
+ raise ParsingError(
942
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
943
+ )
944
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
945
+
946
+ async def update_plan(
947
+ self,
948
+ plan_id: str,
949
+ *,
950
+ plan_name: typing.Optional[str] = OMIT,
951
+ plan_description: typing.Optional[str] = OMIT,
952
+ amount: typing.Optional[SubscriptionAmount] = OMIT,
953
+ max_limit_amount: typing.Optional[SubscriptionAmount] = OMIT,
954
+ trial_period_in_days: typing.Optional[int] = OMIT,
955
+ end_date: typing.Optional[dt.datetime] = OMIT,
956
+ merchant_metadata: typing.Optional[typing.Dict[str, str]] = OMIT,
957
+ request_options: typing.Optional[RequestOptions] = None,
958
+ ) -> AsyncHttpResponse[PlanResponse]:
959
+ """
960
+ Updates an existing subscription plan. Existing subscriptions under
961
+ this plan will remain unaffected. The changes will apply only to
962
+ new subscriptions created under this plan.
963
+
964
+ Parameters
965
+ ----------
966
+ plan_id : str
967
+ Unique identifier for the subscription plan.
968
+
969
+ plan_name : typing.Optional[str]
970
+ Subscription plan name.
971
+
972
+ plan_description : typing.Optional[str]
973
+ Corresponding description for a plan.
974
+
975
+ amount : typing.Optional[SubscriptionAmount]
976
+
977
+ max_limit_amount : typing.Optional[SubscriptionAmount]
978
+
979
+ trial_period_in_days : typing.Optional[int]
980
+ Duration of the trial period in days.
981
+
982
+ end_date : typing.Optional[dt.datetime]
983
+ The ISO 8601 UTC Timestamp when the subscription plan expires.
984
+
985
+ merchant_metadata : typing.Optional[typing.Dict[str, str]]
986
+ Key-value pairs for additional information. Max 10 pairs, 256 chars each.
987
+
988
+ request_options : typing.Optional[RequestOptions]
989
+ Request-specific configuration.
990
+
991
+ Returns
992
+ -------
993
+ AsyncHttpResponse[PlanResponse]
994
+ Plan updated successfully.
995
+ """
996
+ _response = await self._client_wrapper.httpx_client.request(
997
+ f"ps/api/v1/public/plans/{encode_path_param(plan_id)}",
998
+ method="PATCH",
999
+ json={
1000
+ "plan_name": plan_name,
1001
+ "plan_description": plan_description,
1002
+ "amount": convert_and_respect_annotation_metadata(
1003
+ object_=amount, annotation=SubscriptionAmount, direction="write"
1004
+ ),
1005
+ "max_limit_amount": convert_and_respect_annotation_metadata(
1006
+ object_=max_limit_amount, annotation=SubscriptionAmount, direction="write"
1007
+ ),
1008
+ "trial_period_in_days": trial_period_in_days,
1009
+ "end_date": end_date,
1010
+ "merchant_metadata": merchant_metadata,
1011
+ },
1012
+ headers={
1013
+ "content-type": "application/json",
1014
+ },
1015
+ request_options=request_options,
1016
+ omit=OMIT,
1017
+ )
1018
+ try:
1019
+ if 200 <= _response.status_code < 300:
1020
+ _data = typing.cast(
1021
+ PlanResponse,
1022
+ parse_obj_as(
1023
+ type_=PlanResponse, # type: ignore
1024
+ object_=_response.json(),
1025
+ ),
1026
+ )
1027
+ return AsyncHttpResponse(response=_response, data=_data)
1028
+ if _response.status_code == 400:
1029
+ raise BadRequestError(
1030
+ headers=dict(_response.headers),
1031
+ body=typing.cast(
1032
+ typing.Any,
1033
+ parse_obj_as(
1034
+ type_=typing.Any, # type: ignore
1035
+ object_=_response.json(),
1036
+ ),
1037
+ ),
1038
+ )
1039
+ _response_json = _response.json()
1040
+ except JSONDecodeError:
1041
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1042
+ except ValidationError as e:
1043
+ raise ParsingError(
1044
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1045
+ )
1046
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1047
+
1048
+ async def get_plan_by_merchant_reference(
1049
+ self, merchant_plan_reference: str, *, request_options: typing.Optional[RequestOptions] = None
1050
+ ) -> AsyncHttpResponse[PlanResponse]:
1051
+ """
1052
+ Retrieves a specific subscription plan by the merchant plan reference.
1053
+
1054
+ Parameters
1055
+ ----------
1056
+ merchant_plan_reference : str
1057
+ Unique identifier of the merchant plan reference.
1058
+
1059
+ request_options : typing.Optional[RequestOptions]
1060
+ Request-specific configuration.
1061
+
1062
+ Returns
1063
+ -------
1064
+ AsyncHttpResponse[PlanResponse]
1065
+ Plan retrieved successfully.
1066
+ """
1067
+ _response = await self._client_wrapper.httpx_client.request(
1068
+ f"ps/api/v1/public/plans/reference/{encode_path_param(merchant_plan_reference)}",
1069
+ method="GET",
1070
+ request_options=request_options,
1071
+ )
1072
+ try:
1073
+ if 200 <= _response.status_code < 300:
1074
+ _data = typing.cast(
1075
+ PlanResponse,
1076
+ parse_obj_as(
1077
+ type_=PlanResponse, # type: ignore
1078
+ object_=_response.json(),
1079
+ ),
1080
+ )
1081
+ return AsyncHttpResponse(response=_response, data=_data)
1082
+ if _response.status_code == 404:
1083
+ raise NotFoundError(
1084
+ headers=dict(_response.headers),
1085
+ body=typing.cast(
1086
+ ErrorResponse,
1087
+ parse_obj_as(
1088
+ type_=ErrorResponse, # type: ignore
1089
+ object_=_response.json(),
1090
+ ),
1091
+ ),
1092
+ )
1093
+ if _response.status_code == 500:
1094
+ raise InternalServerError(
1095
+ headers=dict(_response.headers),
1096
+ body=typing.cast(
1097
+ ErrorResponse,
1098
+ parse_obj_as(
1099
+ type_=ErrorResponse, # type: ignore
1100
+ object_=_response.json(),
1101
+ ),
1102
+ ),
1103
+ )
1104
+ _response_json = _response.json()
1105
+ except JSONDecodeError:
1106
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1107
+ except ValidationError as e:
1108
+ raise ParsingError(
1109
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1110
+ )
1111
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)