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