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,1281 @@
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.bank_account import BankAccount
21
+ from ..types.create_subscription_response import CreateSubscriptionResponse
22
+ from ..types.error_response import ErrorResponse
23
+ from ..types.list_subscriptions_response import ListSubscriptionsResponse
24
+ from ..types.subscription_detail import SubscriptionDetail
25
+ from .types.create_subscription_request_allowed_payment_methods_item import (
26
+ CreateSubscriptionRequestAllowedPaymentMethodsItem,
27
+ )
28
+ from .types.create_subscription_request_integration_mode import CreateSubscriptionRequestIntegrationMode
29
+ from .types.list_subscriptions_request_amount_range import ListSubscriptionsRequestAmountRange
30
+ from pydantic import ValidationError
31
+
32
+ # this is used as the default value for optional parameters
33
+ OMIT = typing.cast(typing.Any, ...)
34
+
35
+
36
+ class RawSubscriptionsSubscriptionsClient:
37
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
38
+ self._client_wrapper = client_wrapper
39
+
40
+ def list_subscriptions(
41
+ self,
42
+ *,
43
+ plan_id: typing.Optional[str] = None,
44
+ status: typing.Optional[str] = None,
45
+ amount: typing.Optional[int] = None,
46
+ amount_range: typing.Optional[ListSubscriptionsRequestAmountRange] = None,
47
+ start_date: typing.Optional[dt.datetime] = None,
48
+ end_date: typing.Optional[dt.datetime] = None,
49
+ size: typing.Optional[int] = None,
50
+ page: typing.Optional[int] = None,
51
+ sort: typing.Optional[str] = None,
52
+ frequency: typing.Optional[str] = None,
53
+ request_options: typing.Optional[RequestOptions] = None,
54
+ ) -> HttpResponse[ListSubscriptionsResponse]:
55
+ """
56
+ Retrieves all subscriptions. Supports filtering by plan_id, status,
57
+ amount, date range, frequency, and pagination.
58
+
59
+ Parameters
60
+ ----------
61
+ plan_id : typing.Optional[str]
62
+ Filter by plan ID.
63
+
64
+ status : typing.Optional[str]
65
+ Filter by subscription status.
66
+
67
+ amount : typing.Optional[int]
68
+ Filter by amount value.
69
+
70
+ amount_range : typing.Optional[ListSubscriptionsRequestAmountRange]
71
+ Amount comparison operator.
72
+
73
+ start_date : typing.Optional[dt.datetime]
74
+ Filter subscriptions with start date after this value.
75
+
76
+ end_date : typing.Optional[dt.datetime]
77
+ Filter subscriptions with end date before this value.
78
+
79
+ size : typing.Optional[int]
80
+ Number of items per page.
81
+
82
+ page : typing.Optional[int]
83
+ Page number.
84
+
85
+ sort : typing.Optional[str]
86
+ Sort field and direction.
87
+
88
+ frequency : typing.Optional[str]
89
+ Filter by billing frequency.
90
+
91
+ request_options : typing.Optional[RequestOptions]
92
+ Request-specific configuration.
93
+
94
+ Returns
95
+ -------
96
+ HttpResponse[ListSubscriptionsResponse]
97
+ Subscriptions retrieved successfully.
98
+ """
99
+ _response = self._client_wrapper.httpx_client.request(
100
+ "ps/api/v1/public/subscriptions",
101
+ method="GET",
102
+ params={
103
+ "plan_id": plan_id,
104
+ "status": status,
105
+ "amount": amount,
106
+ "amount_range": amount_range,
107
+ "start_date": serialize_datetime(start_date) if start_date is not None else None,
108
+ "end_date": serialize_datetime(end_date) if end_date is not None else None,
109
+ "size": size,
110
+ "page": page,
111
+ "sort": sort,
112
+ "frequency": frequency,
113
+ },
114
+ request_options=request_options,
115
+ )
116
+ try:
117
+ if 200 <= _response.status_code < 300:
118
+ _data = typing.cast(
119
+ ListSubscriptionsResponse,
120
+ parse_obj_as(
121
+ type_=ListSubscriptionsResponse, # type: ignore
122
+ object_=_response.json(),
123
+ ),
124
+ )
125
+ return HttpResponse(response=_response, data=_data)
126
+ if _response.status_code == 500:
127
+ raise InternalServerError(
128
+ headers=dict(_response.headers),
129
+ body=typing.cast(
130
+ ErrorResponse,
131
+ parse_obj_as(
132
+ type_=ErrorResponse, # type: ignore
133
+ object_=_response.json(),
134
+ ),
135
+ ),
136
+ )
137
+ _response_json = _response.json()
138
+ except JSONDecodeError:
139
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
140
+ except ValidationError as e:
141
+ raise ParsingError(
142
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
143
+ )
144
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
145
+
146
+ def create_subscription(
147
+ self,
148
+ *,
149
+ merchant_subscription_reference: str,
150
+ plan_id: str,
151
+ start_date: dt.datetime,
152
+ end_date: dt.datetime,
153
+ customer_id: str,
154
+ integration_mode: CreateSubscriptionRequestIntegrationMode,
155
+ enable_notification: typing.Optional[bool] = OMIT,
156
+ allowed_payment_methods: typing.Optional[
157
+ typing.Sequence[CreateSubscriptionRequestAllowedPaymentMethodsItem]
158
+ ] = OMIT,
159
+ merchant_metadata: typing.Optional[typing.Dict[str, str]] = OMIT,
160
+ is_tpv_enabled: typing.Optional[bool] = OMIT,
161
+ bank_account: typing.Optional[BankAccount] = OMIT,
162
+ callback_url: typing.Optional[str] = OMIT,
163
+ failure_callback_url: typing.Optional[str] = OMIT,
164
+ request_options: typing.Optional[RequestOptions] = None,
165
+ ) -> HttpResponse[CreateSubscriptionResponse]:
166
+ """
167
+ Creates a new subscription against an existing plan. The subscription
168
+ defines the recurring billing cycle for a customer based on the
169
+ selected plan's pricing and frequency.
170
+
171
+ Parameters
172
+ ----------
173
+ merchant_subscription_reference : str
174
+ **Idempotency Key.** Unique identifier of the merchant subscription reference. Duplicate requests with the same `merchant_subscription_reference` will return the existing subscription instead of creating a new one.
175
+
176
+ plan_id : str
177
+ Unique identifier for the subscription plan.
178
+
179
+ start_date : dt.datetime
180
+ The ISO 8601 UTC Timestamp when the subscription starts.
181
+
182
+ end_date : dt.datetime
183
+ The ISO 8601 UTC Timestamp when the subscription expires.
184
+
185
+ customer_id : str
186
+ Unique identifier of the customer in the Pine Labs Online database.
187
+
188
+ integration_mode : CreateSubscriptionRequestIntegrationMode
189
+ Type of integration.
190
+
191
+ enable_notification : typing.Optional[bool]
192
+ Indicates if notifications are enabled.
193
+
194
+ allowed_payment_methods : typing.Optional[typing.Sequence[CreateSubscriptionRequestAllowedPaymentMethodsItem]]
195
+ The type of payment methods you want to offer customers.
196
+
197
+ merchant_metadata : typing.Optional[typing.Dict[str, str]]
198
+ Key-value pairs for additional information. Max 10 pairs, 256 chars each.
199
+
200
+ is_tpv_enabled : typing.Optional[bool]
201
+ Indicates if Third-Party Validation (TPV) is enabled.
202
+
203
+ bank_account : typing.Optional[BankAccount]
204
+
205
+ callback_url : typing.Optional[str]
206
+ URL to redirect customers to specific success or failure pages.
207
+
208
+ failure_callback_url : typing.Optional[str]
209
+ URL specifically used to redirect customers to a failure page.
210
+
211
+ request_options : typing.Optional[RequestOptions]
212
+ Request-specific configuration.
213
+
214
+ Returns
215
+ -------
216
+ HttpResponse[CreateSubscriptionResponse]
217
+ Subscription created successfully.
218
+ """
219
+ _response = self._client_wrapper.httpx_client.request(
220
+ "ps/api/v1/public/subscriptions",
221
+ method="POST",
222
+ json={
223
+ "merchant_subscription_reference": merchant_subscription_reference,
224
+ "plan_id": plan_id,
225
+ "enable_notification": enable_notification,
226
+ "start_date": start_date,
227
+ "end_date": end_date,
228
+ "customer_id": customer_id,
229
+ "allowed_payment_methods": allowed_payment_methods,
230
+ "integration_mode": integration_mode,
231
+ "merchant_metadata": merchant_metadata,
232
+ "is_tpv_enabled": is_tpv_enabled,
233
+ "bank_account": convert_and_respect_annotation_metadata(
234
+ object_=bank_account, annotation=BankAccount, direction="write"
235
+ ),
236
+ "callback_url": callback_url,
237
+ "failure_callback_url": failure_callback_url,
238
+ },
239
+ headers={
240
+ "content-type": "application/json",
241
+ },
242
+ request_options=request_options,
243
+ omit=OMIT,
244
+ )
245
+ try:
246
+ if 200 <= _response.status_code < 300:
247
+ _data = typing.cast(
248
+ CreateSubscriptionResponse,
249
+ parse_obj_as(
250
+ type_=CreateSubscriptionResponse, # type: ignore
251
+ object_=_response.json(),
252
+ ),
253
+ )
254
+ return HttpResponse(response=_response, data=_data)
255
+ if _response.status_code == 404:
256
+ raise NotFoundError(
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 get_subscription_by_id(
298
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
299
+ ) -> HttpResponse[SubscriptionDetail]:
300
+ """
301
+ Retrieves a specific subscription by its subscription ID.
302
+
303
+ Parameters
304
+ ----------
305
+ subscription_id : str
306
+ Unique identifier for the subscription.
307
+
308
+ request_options : typing.Optional[RequestOptions]
309
+ Request-specific configuration.
310
+
311
+ Returns
312
+ -------
313
+ HttpResponse[SubscriptionDetail]
314
+ Subscription retrieved successfully.
315
+ """
316
+ _response = self._client_wrapper.httpx_client.request(
317
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}",
318
+ method="GET",
319
+ request_options=request_options,
320
+ )
321
+ try:
322
+ if 200 <= _response.status_code < 300:
323
+ _data = typing.cast(
324
+ SubscriptionDetail,
325
+ parse_obj_as(
326
+ type_=SubscriptionDetail, # type: ignore
327
+ object_=_response.json(),
328
+ ),
329
+ )
330
+ return HttpResponse(response=_response, data=_data)
331
+ if _response.status_code == 500:
332
+ raise InternalServerError(
333
+ headers=dict(_response.headers),
334
+ body=typing.cast(
335
+ ErrorResponse,
336
+ parse_obj_as(
337
+ type_=ErrorResponse, # type: ignore
338
+ object_=_response.json(),
339
+ ),
340
+ ),
341
+ )
342
+ _response_json = _response.json()
343
+ except JSONDecodeError:
344
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
345
+ except ValidationError as e:
346
+ raise ParsingError(
347
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
348
+ )
349
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
350
+
351
+ def update_subscription(
352
+ self,
353
+ subscription_id: str,
354
+ *,
355
+ reason: str,
356
+ new_plan_id: typing.Optional[str] = OMIT,
357
+ new_end_date: typing.Optional[dt.datetime] = OMIT,
358
+ request_options: typing.Optional[RequestOptions] = None,
359
+ ) -> HttpResponse[SubscriptionDetail]:
360
+ """
361
+ Updates an existing subscription. You can switch to a new plan
362
+ or update the end date. A reason is required.
363
+
364
+ Parameters
365
+ ----------
366
+ subscription_id : str
367
+ Unique identifier for the subscription.
368
+
369
+ reason : str
370
+ Reason for the update.
371
+
372
+ new_plan_id : typing.Optional[str]
373
+ New plan ID to switch the subscription to.
374
+
375
+ new_end_date : typing.Optional[dt.datetime]
376
+ New end date in ISO 8601 UTC.
377
+
378
+ request_options : typing.Optional[RequestOptions]
379
+ Request-specific configuration.
380
+
381
+ Returns
382
+ -------
383
+ HttpResponse[SubscriptionDetail]
384
+ Subscription updated successfully.
385
+ """
386
+ _response = self._client_wrapper.httpx_client.request(
387
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}",
388
+ method="PATCH",
389
+ json={
390
+ "new_plan_id": new_plan_id,
391
+ "new_end_date": new_end_date,
392
+ "reason": reason,
393
+ },
394
+ headers={
395
+ "content-type": "application/json",
396
+ },
397
+ request_options=request_options,
398
+ omit=OMIT,
399
+ )
400
+ try:
401
+ if 200 <= _response.status_code < 300:
402
+ _data = typing.cast(
403
+ SubscriptionDetail,
404
+ parse_obj_as(
405
+ type_=SubscriptionDetail, # type: ignore
406
+ object_=_response.json(),
407
+ ),
408
+ )
409
+ return HttpResponse(response=_response, data=_data)
410
+ if _response.status_code == 404:
411
+ raise NotFoundError(
412
+ headers=dict(_response.headers),
413
+ body=typing.cast(
414
+ ErrorResponse,
415
+ parse_obj_as(
416
+ type_=ErrorResponse, # type: ignore
417
+ object_=_response.json(),
418
+ ),
419
+ ),
420
+ )
421
+ if _response.status_code == 500:
422
+ raise InternalServerError(
423
+ headers=dict(_response.headers),
424
+ body=typing.cast(
425
+ ErrorResponse,
426
+ parse_obj_as(
427
+ type_=ErrorResponse, # type: ignore
428
+ object_=_response.json(),
429
+ ),
430
+ ),
431
+ )
432
+ _response_json = _response.json()
433
+ except JSONDecodeError:
434
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
435
+ except ValidationError as e:
436
+ raise ParsingError(
437
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
438
+ )
439
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
440
+
441
+ def get_subscription_by_merchant_reference(
442
+ self, merchant_subscription_reference: str, *, request_options: typing.Optional[RequestOptions] = None
443
+ ) -> HttpResponse[SubscriptionDetail]:
444
+ """
445
+ Retrieves a specific subscription by the merchant subscription reference.
446
+
447
+ Parameters
448
+ ----------
449
+ merchant_subscription_reference : str
450
+ Unique identifier of the merchant subscription reference.
451
+
452
+ request_options : typing.Optional[RequestOptions]
453
+ Request-specific configuration.
454
+
455
+ Returns
456
+ -------
457
+ HttpResponse[SubscriptionDetail]
458
+ Subscription retrieved successfully.
459
+ """
460
+ _response = self._client_wrapper.httpx_client.request(
461
+ f"ps/api/v1/public/subscriptions/reference/{encode_path_param(merchant_subscription_reference)}",
462
+ method="GET",
463
+ request_options=request_options,
464
+ )
465
+ try:
466
+ if 200 <= _response.status_code < 300:
467
+ _data = typing.cast(
468
+ SubscriptionDetail,
469
+ parse_obj_as(
470
+ type_=SubscriptionDetail, # type: ignore
471
+ object_=_response.json(),
472
+ ),
473
+ )
474
+ return HttpResponse(response=_response, data=_data)
475
+ if _response.status_code == 500:
476
+ raise InternalServerError(
477
+ headers=dict(_response.headers),
478
+ body=typing.cast(
479
+ ErrorResponse,
480
+ parse_obj_as(
481
+ type_=ErrorResponse, # type: ignore
482
+ object_=_response.json(),
483
+ ),
484
+ ),
485
+ )
486
+ _response_json = _response.json()
487
+ except JSONDecodeError:
488
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
489
+ except ValidationError as e:
490
+ raise ParsingError(
491
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
492
+ )
493
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
494
+
495
+ def cancel_subscription(
496
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
497
+ ) -> HttpResponse[SubscriptionDetail]:
498
+ """
499
+ Cancels an active subscription. Once cancelled, the subscription
500
+ can no longer process recurring payments.
501
+
502
+ Parameters
503
+ ----------
504
+ subscription_id : str
505
+ Unique identifier for the subscription.
506
+
507
+ request_options : typing.Optional[RequestOptions]
508
+ Request-specific configuration.
509
+
510
+ Returns
511
+ -------
512
+ HttpResponse[SubscriptionDetail]
513
+ Subscription cancelled successfully.
514
+ """
515
+ _response = self._client_wrapper.httpx_client.request(
516
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}/cancel",
517
+ method="POST",
518
+ request_options=request_options,
519
+ )
520
+ try:
521
+ if 200 <= _response.status_code < 300:
522
+ _data = typing.cast(
523
+ SubscriptionDetail,
524
+ parse_obj_as(
525
+ type_=SubscriptionDetail, # type: ignore
526
+ object_=_response.json(),
527
+ ),
528
+ )
529
+ return HttpResponse(response=_response, data=_data)
530
+ if _response.status_code == 400:
531
+ raise BadRequestError(
532
+ headers=dict(_response.headers),
533
+ body=typing.cast(
534
+ typing.Any,
535
+ parse_obj_as(
536
+ type_=typing.Any, # type: ignore
537
+ object_=_response.json(),
538
+ ),
539
+ ),
540
+ )
541
+ _response_json = _response.json()
542
+ except JSONDecodeError:
543
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
544
+ except ValidationError as e:
545
+ raise ParsingError(
546
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
547
+ )
548
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
549
+
550
+ def pause_subscription(
551
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
552
+ ) -> HttpResponse[SubscriptionDetail]:
553
+ """
554
+ Pauses an active subscription. The subscription must be in an
555
+ active, inactive, trial, or resumed state to be paused.
556
+
557
+ Parameters
558
+ ----------
559
+ subscription_id : str
560
+ Unique identifier for the subscription.
561
+
562
+ request_options : typing.Optional[RequestOptions]
563
+ Request-specific configuration.
564
+
565
+ Returns
566
+ -------
567
+ HttpResponse[SubscriptionDetail]
568
+ Subscription paused successfully.
569
+ """
570
+ _response = self._client_wrapper.httpx_client.request(
571
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}/pause",
572
+ method="POST",
573
+ request_options=request_options,
574
+ )
575
+ try:
576
+ if 200 <= _response.status_code < 300:
577
+ _data = typing.cast(
578
+ SubscriptionDetail,
579
+ parse_obj_as(
580
+ type_=SubscriptionDetail, # type: ignore
581
+ object_=_response.json(),
582
+ ),
583
+ )
584
+ return HttpResponse(response=_response, data=_data)
585
+ if _response.status_code == 500:
586
+ raise InternalServerError(
587
+ headers=dict(_response.headers),
588
+ body=typing.cast(
589
+ ErrorResponse,
590
+ parse_obj_as(
591
+ type_=ErrorResponse, # type: ignore
592
+ object_=_response.json(),
593
+ ),
594
+ ),
595
+ )
596
+ _response_json = _response.json()
597
+ except JSONDecodeError:
598
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
599
+ except ValidationError as e:
600
+ raise ParsingError(
601
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
602
+ )
603
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
604
+
605
+ def resume_subscription(
606
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
607
+ ) -> HttpResponse[SubscriptionDetail]:
608
+ """
609
+ Resumes a paused or halted subscription.
610
+
611
+ Parameters
612
+ ----------
613
+ subscription_id : str
614
+ Unique identifier for the subscription.
615
+
616
+ request_options : typing.Optional[RequestOptions]
617
+ Request-specific configuration.
618
+
619
+ Returns
620
+ -------
621
+ HttpResponse[SubscriptionDetail]
622
+ Subscription resumed successfully.
623
+ """
624
+ _response = self._client_wrapper.httpx_client.request(
625
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}/resume",
626
+ method="POST",
627
+ request_options=request_options,
628
+ )
629
+ try:
630
+ if 200 <= _response.status_code < 300:
631
+ _data = typing.cast(
632
+ SubscriptionDetail,
633
+ parse_obj_as(
634
+ type_=SubscriptionDetail, # type: ignore
635
+ object_=_response.json(),
636
+ ),
637
+ )
638
+ return HttpResponse(response=_response, data=_data)
639
+ if _response.status_code == 500:
640
+ raise InternalServerError(
641
+ headers=dict(_response.headers),
642
+ body=typing.cast(
643
+ ErrorResponse,
644
+ parse_obj_as(
645
+ type_=ErrorResponse, # type: ignore
646
+ object_=_response.json(),
647
+ ),
648
+ ),
649
+ )
650
+ _response_json = _response.json()
651
+ except JSONDecodeError:
652
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
653
+ except ValidationError as e:
654
+ raise ParsingError(
655
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
656
+ )
657
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
658
+
659
+
660
+ class AsyncRawSubscriptionsSubscriptionsClient:
661
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
662
+ self._client_wrapper = client_wrapper
663
+
664
+ async def list_subscriptions(
665
+ self,
666
+ *,
667
+ plan_id: typing.Optional[str] = None,
668
+ status: typing.Optional[str] = None,
669
+ amount: typing.Optional[int] = None,
670
+ amount_range: typing.Optional[ListSubscriptionsRequestAmountRange] = None,
671
+ start_date: typing.Optional[dt.datetime] = None,
672
+ end_date: typing.Optional[dt.datetime] = None,
673
+ size: typing.Optional[int] = None,
674
+ page: typing.Optional[int] = None,
675
+ sort: typing.Optional[str] = None,
676
+ frequency: typing.Optional[str] = None,
677
+ request_options: typing.Optional[RequestOptions] = None,
678
+ ) -> AsyncHttpResponse[ListSubscriptionsResponse]:
679
+ """
680
+ Retrieves all subscriptions. Supports filtering by plan_id, status,
681
+ amount, date range, frequency, and pagination.
682
+
683
+ Parameters
684
+ ----------
685
+ plan_id : typing.Optional[str]
686
+ Filter by plan ID.
687
+
688
+ status : typing.Optional[str]
689
+ Filter by subscription status.
690
+
691
+ amount : typing.Optional[int]
692
+ Filter by amount value.
693
+
694
+ amount_range : typing.Optional[ListSubscriptionsRequestAmountRange]
695
+ Amount comparison operator.
696
+
697
+ start_date : typing.Optional[dt.datetime]
698
+ Filter subscriptions with start date after this value.
699
+
700
+ end_date : typing.Optional[dt.datetime]
701
+ Filter subscriptions with end date before this value.
702
+
703
+ size : typing.Optional[int]
704
+ Number of items per page.
705
+
706
+ page : typing.Optional[int]
707
+ Page number.
708
+
709
+ sort : typing.Optional[str]
710
+ Sort field and direction.
711
+
712
+ frequency : typing.Optional[str]
713
+ Filter by billing frequency.
714
+
715
+ request_options : typing.Optional[RequestOptions]
716
+ Request-specific configuration.
717
+
718
+ Returns
719
+ -------
720
+ AsyncHttpResponse[ListSubscriptionsResponse]
721
+ Subscriptions retrieved successfully.
722
+ """
723
+ _response = await self._client_wrapper.httpx_client.request(
724
+ "ps/api/v1/public/subscriptions",
725
+ method="GET",
726
+ params={
727
+ "plan_id": plan_id,
728
+ "status": status,
729
+ "amount": amount,
730
+ "amount_range": amount_range,
731
+ "start_date": serialize_datetime(start_date) if start_date is not None else None,
732
+ "end_date": serialize_datetime(end_date) if end_date is not None else None,
733
+ "size": size,
734
+ "page": page,
735
+ "sort": sort,
736
+ "frequency": frequency,
737
+ },
738
+ request_options=request_options,
739
+ )
740
+ try:
741
+ if 200 <= _response.status_code < 300:
742
+ _data = typing.cast(
743
+ ListSubscriptionsResponse,
744
+ parse_obj_as(
745
+ type_=ListSubscriptionsResponse, # type: ignore
746
+ object_=_response.json(),
747
+ ),
748
+ )
749
+ return AsyncHttpResponse(response=_response, data=_data)
750
+ if _response.status_code == 500:
751
+ raise InternalServerError(
752
+ headers=dict(_response.headers),
753
+ body=typing.cast(
754
+ ErrorResponse,
755
+ parse_obj_as(
756
+ type_=ErrorResponse, # type: ignore
757
+ object_=_response.json(),
758
+ ),
759
+ ),
760
+ )
761
+ _response_json = _response.json()
762
+ except JSONDecodeError:
763
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
764
+ except ValidationError as e:
765
+ raise ParsingError(
766
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
767
+ )
768
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
769
+
770
+ async def create_subscription(
771
+ self,
772
+ *,
773
+ merchant_subscription_reference: str,
774
+ plan_id: str,
775
+ start_date: dt.datetime,
776
+ end_date: dt.datetime,
777
+ customer_id: str,
778
+ integration_mode: CreateSubscriptionRequestIntegrationMode,
779
+ enable_notification: typing.Optional[bool] = OMIT,
780
+ allowed_payment_methods: typing.Optional[
781
+ typing.Sequence[CreateSubscriptionRequestAllowedPaymentMethodsItem]
782
+ ] = OMIT,
783
+ merchant_metadata: typing.Optional[typing.Dict[str, str]] = OMIT,
784
+ is_tpv_enabled: typing.Optional[bool] = OMIT,
785
+ bank_account: typing.Optional[BankAccount] = OMIT,
786
+ callback_url: typing.Optional[str] = OMIT,
787
+ failure_callback_url: typing.Optional[str] = OMIT,
788
+ request_options: typing.Optional[RequestOptions] = None,
789
+ ) -> AsyncHttpResponse[CreateSubscriptionResponse]:
790
+ """
791
+ Creates a new subscription against an existing plan. The subscription
792
+ defines the recurring billing cycle for a customer based on the
793
+ selected plan's pricing and frequency.
794
+
795
+ Parameters
796
+ ----------
797
+ merchant_subscription_reference : str
798
+ **Idempotency Key.** Unique identifier of the merchant subscription reference. Duplicate requests with the same `merchant_subscription_reference` will return the existing subscription instead of creating a new one.
799
+
800
+ plan_id : str
801
+ Unique identifier for the subscription plan.
802
+
803
+ start_date : dt.datetime
804
+ The ISO 8601 UTC Timestamp when the subscription starts.
805
+
806
+ end_date : dt.datetime
807
+ The ISO 8601 UTC Timestamp when the subscription expires.
808
+
809
+ customer_id : str
810
+ Unique identifier of the customer in the Pine Labs Online database.
811
+
812
+ integration_mode : CreateSubscriptionRequestIntegrationMode
813
+ Type of integration.
814
+
815
+ enable_notification : typing.Optional[bool]
816
+ Indicates if notifications are enabled.
817
+
818
+ allowed_payment_methods : typing.Optional[typing.Sequence[CreateSubscriptionRequestAllowedPaymentMethodsItem]]
819
+ The type of payment methods you want to offer customers.
820
+
821
+ merchant_metadata : typing.Optional[typing.Dict[str, str]]
822
+ Key-value pairs for additional information. Max 10 pairs, 256 chars each.
823
+
824
+ is_tpv_enabled : typing.Optional[bool]
825
+ Indicates if Third-Party Validation (TPV) is enabled.
826
+
827
+ bank_account : typing.Optional[BankAccount]
828
+
829
+ callback_url : typing.Optional[str]
830
+ URL to redirect customers to specific success or failure pages.
831
+
832
+ failure_callback_url : typing.Optional[str]
833
+ URL specifically used to redirect customers to a failure page.
834
+
835
+ request_options : typing.Optional[RequestOptions]
836
+ Request-specific configuration.
837
+
838
+ Returns
839
+ -------
840
+ AsyncHttpResponse[CreateSubscriptionResponse]
841
+ Subscription created successfully.
842
+ """
843
+ _response = await self._client_wrapper.httpx_client.request(
844
+ "ps/api/v1/public/subscriptions",
845
+ method="POST",
846
+ json={
847
+ "merchant_subscription_reference": merchant_subscription_reference,
848
+ "plan_id": plan_id,
849
+ "enable_notification": enable_notification,
850
+ "start_date": start_date,
851
+ "end_date": end_date,
852
+ "customer_id": customer_id,
853
+ "allowed_payment_methods": allowed_payment_methods,
854
+ "integration_mode": integration_mode,
855
+ "merchant_metadata": merchant_metadata,
856
+ "is_tpv_enabled": is_tpv_enabled,
857
+ "bank_account": convert_and_respect_annotation_metadata(
858
+ object_=bank_account, annotation=BankAccount, direction="write"
859
+ ),
860
+ "callback_url": callback_url,
861
+ "failure_callback_url": failure_callback_url,
862
+ },
863
+ headers={
864
+ "content-type": "application/json",
865
+ },
866
+ request_options=request_options,
867
+ omit=OMIT,
868
+ )
869
+ try:
870
+ if 200 <= _response.status_code < 300:
871
+ _data = typing.cast(
872
+ CreateSubscriptionResponse,
873
+ parse_obj_as(
874
+ type_=CreateSubscriptionResponse, # type: ignore
875
+ object_=_response.json(),
876
+ ),
877
+ )
878
+ return AsyncHttpResponse(response=_response, data=_data)
879
+ if _response.status_code == 404:
880
+ raise NotFoundError(
881
+ headers=dict(_response.headers),
882
+ body=typing.cast(
883
+ ErrorResponse,
884
+ parse_obj_as(
885
+ type_=ErrorResponse, # type: ignore
886
+ object_=_response.json(),
887
+ ),
888
+ ),
889
+ )
890
+ if _response.status_code == 422:
891
+ raise UnprocessableEntityError(
892
+ headers=dict(_response.headers),
893
+ body=typing.cast(
894
+ typing.Any,
895
+ parse_obj_as(
896
+ type_=typing.Any, # type: ignore
897
+ object_=_response.json(),
898
+ ),
899
+ ),
900
+ )
901
+ if _response.status_code == 500:
902
+ raise InternalServerError(
903
+ headers=dict(_response.headers),
904
+ body=typing.cast(
905
+ ErrorResponse,
906
+ parse_obj_as(
907
+ type_=ErrorResponse, # type: ignore
908
+ object_=_response.json(),
909
+ ),
910
+ ),
911
+ )
912
+ _response_json = _response.json()
913
+ except JSONDecodeError:
914
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
915
+ except ValidationError as e:
916
+ raise ParsingError(
917
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
918
+ )
919
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
920
+
921
+ async def get_subscription_by_id(
922
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
923
+ ) -> AsyncHttpResponse[SubscriptionDetail]:
924
+ """
925
+ Retrieves a specific subscription by its subscription ID.
926
+
927
+ Parameters
928
+ ----------
929
+ subscription_id : str
930
+ Unique identifier for the subscription.
931
+
932
+ request_options : typing.Optional[RequestOptions]
933
+ Request-specific configuration.
934
+
935
+ Returns
936
+ -------
937
+ AsyncHttpResponse[SubscriptionDetail]
938
+ Subscription retrieved successfully.
939
+ """
940
+ _response = await self._client_wrapper.httpx_client.request(
941
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}",
942
+ method="GET",
943
+ request_options=request_options,
944
+ )
945
+ try:
946
+ if 200 <= _response.status_code < 300:
947
+ _data = typing.cast(
948
+ SubscriptionDetail,
949
+ parse_obj_as(
950
+ type_=SubscriptionDetail, # type: ignore
951
+ object_=_response.json(),
952
+ ),
953
+ )
954
+ return AsyncHttpResponse(response=_response, data=_data)
955
+ if _response.status_code == 500:
956
+ raise InternalServerError(
957
+ headers=dict(_response.headers),
958
+ body=typing.cast(
959
+ ErrorResponse,
960
+ parse_obj_as(
961
+ type_=ErrorResponse, # type: ignore
962
+ object_=_response.json(),
963
+ ),
964
+ ),
965
+ )
966
+ _response_json = _response.json()
967
+ except JSONDecodeError:
968
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
969
+ except ValidationError as e:
970
+ raise ParsingError(
971
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
972
+ )
973
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
974
+
975
+ async def update_subscription(
976
+ self,
977
+ subscription_id: str,
978
+ *,
979
+ reason: str,
980
+ new_plan_id: typing.Optional[str] = OMIT,
981
+ new_end_date: typing.Optional[dt.datetime] = OMIT,
982
+ request_options: typing.Optional[RequestOptions] = None,
983
+ ) -> AsyncHttpResponse[SubscriptionDetail]:
984
+ """
985
+ Updates an existing subscription. You can switch to a new plan
986
+ or update the end date. A reason is required.
987
+
988
+ Parameters
989
+ ----------
990
+ subscription_id : str
991
+ Unique identifier for the subscription.
992
+
993
+ reason : str
994
+ Reason for the update.
995
+
996
+ new_plan_id : typing.Optional[str]
997
+ New plan ID to switch the subscription to.
998
+
999
+ new_end_date : typing.Optional[dt.datetime]
1000
+ New end date in ISO 8601 UTC.
1001
+
1002
+ request_options : typing.Optional[RequestOptions]
1003
+ Request-specific configuration.
1004
+
1005
+ Returns
1006
+ -------
1007
+ AsyncHttpResponse[SubscriptionDetail]
1008
+ Subscription updated successfully.
1009
+ """
1010
+ _response = await self._client_wrapper.httpx_client.request(
1011
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}",
1012
+ method="PATCH",
1013
+ json={
1014
+ "new_plan_id": new_plan_id,
1015
+ "new_end_date": new_end_date,
1016
+ "reason": reason,
1017
+ },
1018
+ headers={
1019
+ "content-type": "application/json",
1020
+ },
1021
+ request_options=request_options,
1022
+ omit=OMIT,
1023
+ )
1024
+ try:
1025
+ if 200 <= _response.status_code < 300:
1026
+ _data = typing.cast(
1027
+ SubscriptionDetail,
1028
+ parse_obj_as(
1029
+ type_=SubscriptionDetail, # type: ignore
1030
+ object_=_response.json(),
1031
+ ),
1032
+ )
1033
+ return AsyncHttpResponse(response=_response, data=_data)
1034
+ if _response.status_code == 404:
1035
+ raise NotFoundError(
1036
+ headers=dict(_response.headers),
1037
+ body=typing.cast(
1038
+ ErrorResponse,
1039
+ parse_obj_as(
1040
+ type_=ErrorResponse, # type: ignore
1041
+ object_=_response.json(),
1042
+ ),
1043
+ ),
1044
+ )
1045
+ if _response.status_code == 500:
1046
+ raise InternalServerError(
1047
+ headers=dict(_response.headers),
1048
+ body=typing.cast(
1049
+ ErrorResponse,
1050
+ parse_obj_as(
1051
+ type_=ErrorResponse, # type: ignore
1052
+ object_=_response.json(),
1053
+ ),
1054
+ ),
1055
+ )
1056
+ _response_json = _response.json()
1057
+ except JSONDecodeError:
1058
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1059
+ except ValidationError as e:
1060
+ raise ParsingError(
1061
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1062
+ )
1063
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1064
+
1065
+ async def get_subscription_by_merchant_reference(
1066
+ self, merchant_subscription_reference: str, *, request_options: typing.Optional[RequestOptions] = None
1067
+ ) -> AsyncHttpResponse[SubscriptionDetail]:
1068
+ """
1069
+ Retrieves a specific subscription by the merchant subscription reference.
1070
+
1071
+ Parameters
1072
+ ----------
1073
+ merchant_subscription_reference : str
1074
+ Unique identifier of the merchant subscription reference.
1075
+
1076
+ request_options : typing.Optional[RequestOptions]
1077
+ Request-specific configuration.
1078
+
1079
+ Returns
1080
+ -------
1081
+ AsyncHttpResponse[SubscriptionDetail]
1082
+ Subscription retrieved successfully.
1083
+ """
1084
+ _response = await self._client_wrapper.httpx_client.request(
1085
+ f"ps/api/v1/public/subscriptions/reference/{encode_path_param(merchant_subscription_reference)}",
1086
+ method="GET",
1087
+ request_options=request_options,
1088
+ )
1089
+ try:
1090
+ if 200 <= _response.status_code < 300:
1091
+ _data = typing.cast(
1092
+ SubscriptionDetail,
1093
+ parse_obj_as(
1094
+ type_=SubscriptionDetail, # type: ignore
1095
+ object_=_response.json(),
1096
+ ),
1097
+ )
1098
+ return AsyncHttpResponse(response=_response, data=_data)
1099
+ if _response.status_code == 500:
1100
+ raise InternalServerError(
1101
+ headers=dict(_response.headers),
1102
+ body=typing.cast(
1103
+ ErrorResponse,
1104
+ parse_obj_as(
1105
+ type_=ErrorResponse, # type: ignore
1106
+ object_=_response.json(),
1107
+ ),
1108
+ ),
1109
+ )
1110
+ _response_json = _response.json()
1111
+ except JSONDecodeError:
1112
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1113
+ except ValidationError as e:
1114
+ raise ParsingError(
1115
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1116
+ )
1117
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1118
+
1119
+ async def cancel_subscription(
1120
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
1121
+ ) -> AsyncHttpResponse[SubscriptionDetail]:
1122
+ """
1123
+ Cancels an active subscription. Once cancelled, the subscription
1124
+ can no longer process recurring payments.
1125
+
1126
+ Parameters
1127
+ ----------
1128
+ subscription_id : str
1129
+ Unique identifier for the subscription.
1130
+
1131
+ request_options : typing.Optional[RequestOptions]
1132
+ Request-specific configuration.
1133
+
1134
+ Returns
1135
+ -------
1136
+ AsyncHttpResponse[SubscriptionDetail]
1137
+ Subscription cancelled successfully.
1138
+ """
1139
+ _response = await self._client_wrapper.httpx_client.request(
1140
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}/cancel",
1141
+ method="POST",
1142
+ request_options=request_options,
1143
+ )
1144
+ try:
1145
+ if 200 <= _response.status_code < 300:
1146
+ _data = typing.cast(
1147
+ SubscriptionDetail,
1148
+ parse_obj_as(
1149
+ type_=SubscriptionDetail, # type: ignore
1150
+ object_=_response.json(),
1151
+ ),
1152
+ )
1153
+ return AsyncHttpResponse(response=_response, data=_data)
1154
+ if _response.status_code == 400:
1155
+ raise BadRequestError(
1156
+ headers=dict(_response.headers),
1157
+ body=typing.cast(
1158
+ typing.Any,
1159
+ parse_obj_as(
1160
+ type_=typing.Any, # type: ignore
1161
+ object_=_response.json(),
1162
+ ),
1163
+ ),
1164
+ )
1165
+ _response_json = _response.json()
1166
+ except JSONDecodeError:
1167
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1168
+ except ValidationError as e:
1169
+ raise ParsingError(
1170
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1171
+ )
1172
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1173
+
1174
+ async def pause_subscription(
1175
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
1176
+ ) -> AsyncHttpResponse[SubscriptionDetail]:
1177
+ """
1178
+ Pauses an active subscription. The subscription must be in an
1179
+ active, inactive, trial, or resumed state to be paused.
1180
+
1181
+ Parameters
1182
+ ----------
1183
+ subscription_id : str
1184
+ Unique identifier for the subscription.
1185
+
1186
+ request_options : typing.Optional[RequestOptions]
1187
+ Request-specific configuration.
1188
+
1189
+ Returns
1190
+ -------
1191
+ AsyncHttpResponse[SubscriptionDetail]
1192
+ Subscription paused successfully.
1193
+ """
1194
+ _response = await self._client_wrapper.httpx_client.request(
1195
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}/pause",
1196
+ method="POST",
1197
+ request_options=request_options,
1198
+ )
1199
+ try:
1200
+ if 200 <= _response.status_code < 300:
1201
+ _data = typing.cast(
1202
+ SubscriptionDetail,
1203
+ parse_obj_as(
1204
+ type_=SubscriptionDetail, # type: ignore
1205
+ object_=_response.json(),
1206
+ ),
1207
+ )
1208
+ return AsyncHttpResponse(response=_response, data=_data)
1209
+ if _response.status_code == 500:
1210
+ raise InternalServerError(
1211
+ headers=dict(_response.headers),
1212
+ body=typing.cast(
1213
+ ErrorResponse,
1214
+ parse_obj_as(
1215
+ type_=ErrorResponse, # type: ignore
1216
+ object_=_response.json(),
1217
+ ),
1218
+ ),
1219
+ )
1220
+ _response_json = _response.json()
1221
+ except JSONDecodeError:
1222
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1223
+ except ValidationError as e:
1224
+ raise ParsingError(
1225
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1226
+ )
1227
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1228
+
1229
+ async def resume_subscription(
1230
+ self, subscription_id: str, *, request_options: typing.Optional[RequestOptions] = None
1231
+ ) -> AsyncHttpResponse[SubscriptionDetail]:
1232
+ """
1233
+ Resumes a paused or halted subscription.
1234
+
1235
+ Parameters
1236
+ ----------
1237
+ subscription_id : str
1238
+ Unique identifier for the subscription.
1239
+
1240
+ request_options : typing.Optional[RequestOptions]
1241
+ Request-specific configuration.
1242
+
1243
+ Returns
1244
+ -------
1245
+ AsyncHttpResponse[SubscriptionDetail]
1246
+ Subscription resumed successfully.
1247
+ """
1248
+ _response = await self._client_wrapper.httpx_client.request(
1249
+ f"ps/api/v1/public/subscriptions/{encode_path_param(subscription_id)}/resume",
1250
+ method="POST",
1251
+ request_options=request_options,
1252
+ )
1253
+ try:
1254
+ if 200 <= _response.status_code < 300:
1255
+ _data = typing.cast(
1256
+ SubscriptionDetail,
1257
+ parse_obj_as(
1258
+ type_=SubscriptionDetail, # type: ignore
1259
+ object_=_response.json(),
1260
+ ),
1261
+ )
1262
+ return AsyncHttpResponse(response=_response, data=_data)
1263
+ if _response.status_code == 500:
1264
+ raise InternalServerError(
1265
+ headers=dict(_response.headers),
1266
+ body=typing.cast(
1267
+ ErrorResponse,
1268
+ parse_obj_as(
1269
+ type_=ErrorResponse, # type: ignore
1270
+ object_=_response.json(),
1271
+ ),
1272
+ ),
1273
+ )
1274
+ _response_json = _response.json()
1275
+ except JSONDecodeError:
1276
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1277
+ except ValidationError as e:
1278
+ raise ParsingError(
1279
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1280
+ )
1281
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)