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,1427 @@
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.conflict_error import ConflictError
18
+ from ..errors.forbidden_error import ForbiddenError
19
+ from ..errors.internal_server_error import InternalServerError
20
+ from ..errors.not_found_error import NotFoundError
21
+ from ..errors.unauthorized_error import UnauthorizedError
22
+ from ..types.create_bulk_payout_response import CreateBulkPayoutResponse
23
+ from ..types.create_payout_response import CreatePayoutResponse
24
+ from ..types.error_response import ErrorResponse
25
+ from ..types.get_account_balance_response import GetAccountBalanceResponse
26
+ from ..types.get_payouts_response import GetPayoutsResponse
27
+ from ..types.payout_amount import PayoutAmount
28
+ from ..types.payout_detail import PayoutDetail
29
+ from .types.create_payout_request_mode import CreatePayoutRequestMode
30
+ from .types.list_payouts_request_mode import ListPayoutsRequestMode
31
+ from .types.list_payouts_request_status import ListPayoutsRequestStatus
32
+ from pydantic import ValidationError
33
+
34
+ # this is used as the default value for optional parameters
35
+ OMIT = typing.cast(typing.Any, ...)
36
+
37
+
38
+ class RawPayoutsClient:
39
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
40
+ self._client_wrapper = client_wrapper
41
+
42
+ def create_payout(
43
+ self,
44
+ *,
45
+ client_reference_id: str,
46
+ payee_name: str,
47
+ amount: PayoutAmount,
48
+ mode: CreatePayoutRequestMode,
49
+ remarks: str,
50
+ email: typing.Optional[str] = OMIT,
51
+ phone: typing.Optional[str] = OMIT,
52
+ account_number: typing.Optional[str] = OMIT,
53
+ branch_code: typing.Optional[str] = OMIT,
54
+ request_options: typing.Optional[RequestOptions] = None,
55
+ ) -> HttpResponse[CreatePayoutResponse]:
56
+ """
57
+ Creates a single payout to a beneficiary's bank account or UPI VPA.
58
+ Supports IMPS, NEFT, RTGS, and UPI payment modes.
59
+
60
+ For IMPS/NEFT/RTGS, provide accountNumber and branchCode.
61
+ For UPI, provide vpa instead.
62
+
63
+ Parameters
64
+ ----------
65
+ client_reference_id : str
66
+ Unique identifier to track the payout. Must not contain spaces. **Acts as the idempotency key** — duplicate requests with the same `clientReferenceId` will not create a new payout.
67
+
68
+ payee_name : str
69
+ Name of the beneficiary's bank account holder. Alphabets and spaces only.
70
+
71
+ amount : PayoutAmount
72
+
73
+ mode : CreatePayoutRequestMode
74
+ Mode of payment for the payout.
75
+
76
+ remarks : str
77
+ Description or reference text for the transaction. Supported characters A-Z, a-z, 0-9, hyphen, space.
78
+
79
+ email : typing.Optional[str]
80
+ Email address of the beneficiary.
81
+
82
+ phone : typing.Optional[str]
83
+ Mobile number of the beneficiary (10 numeric digits).
84
+
85
+ account_number : typing.Optional[str]
86
+ Beneficiary's bank account number. Mandatory for IMPS, NEFT, and RTGS.
87
+
88
+ branch_code : typing.Optional[str]
89
+ Beneficiary's bank IFSC code. Mandatory for IMPS, NEFT, and RTGS.
90
+ First 4 characters alphabets, 5th character must be 0, remaining alphanumeric.
91
+
92
+ request_options : typing.Optional[RequestOptions]
93
+ Request-specific configuration.
94
+
95
+ Returns
96
+ -------
97
+ HttpResponse[CreatePayoutResponse]
98
+ Payout created and scheduled successfully.
99
+ """
100
+ _response = self._client_wrapper.httpx_client.request(
101
+ "payouts/v3/payments/banks",
102
+ method="POST",
103
+ json={
104
+ "clientReferenceId": client_reference_id,
105
+ "payeeName": payee_name,
106
+ "email": email,
107
+ "phone": phone,
108
+ "accountNumber": account_number,
109
+ "branchCode": branch_code,
110
+ "amount": convert_and_respect_annotation_metadata(
111
+ object_=amount, annotation=PayoutAmount, direction="write"
112
+ ),
113
+ "mode": mode,
114
+ "remarks": remarks,
115
+ },
116
+ headers={
117
+ "content-type": "application/json",
118
+ },
119
+ request_options=request_options,
120
+ omit=OMIT,
121
+ )
122
+ try:
123
+ if 200 <= _response.status_code < 300:
124
+ _data = typing.cast(
125
+ CreatePayoutResponse,
126
+ parse_obj_as(
127
+ type_=CreatePayoutResponse, # type: ignore
128
+ object_=_response.json(),
129
+ ),
130
+ )
131
+ return HttpResponse(response=_response, data=_data)
132
+ if _response.status_code == 400:
133
+ raise BadRequestError(
134
+ headers=dict(_response.headers),
135
+ body=typing.cast(
136
+ typing.Any,
137
+ parse_obj_as(
138
+ type_=typing.Any, # type: ignore
139
+ object_=_response.json(),
140
+ ),
141
+ ),
142
+ )
143
+ if _response.status_code == 401:
144
+ raise UnauthorizedError(
145
+ headers=dict(_response.headers),
146
+ body=typing.cast(
147
+ ErrorResponse,
148
+ parse_obj_as(
149
+ type_=ErrorResponse, # type: ignore
150
+ object_=_response.json(),
151
+ ),
152
+ ),
153
+ )
154
+ if _response.status_code == 403:
155
+ raise ForbiddenError(
156
+ headers=dict(_response.headers),
157
+ body=typing.cast(
158
+ ErrorResponse,
159
+ parse_obj_as(
160
+ type_=ErrorResponse, # type: ignore
161
+ object_=_response.json(),
162
+ ),
163
+ ),
164
+ )
165
+ if _response.status_code == 409:
166
+ raise ConflictError(
167
+ headers=dict(_response.headers),
168
+ body=typing.cast(
169
+ ErrorResponse,
170
+ parse_obj_as(
171
+ type_=ErrorResponse, # type: ignore
172
+ object_=_response.json(),
173
+ ),
174
+ ),
175
+ )
176
+ if _response.status_code == 500:
177
+ raise InternalServerError(
178
+ headers=dict(_response.headers),
179
+ body=typing.cast(
180
+ ErrorResponse,
181
+ parse_obj_as(
182
+ type_=ErrorResponse, # type: ignore
183
+ object_=_response.json(),
184
+ ),
185
+ ),
186
+ )
187
+ _response_json = _response.json()
188
+ except JSONDecodeError:
189
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
190
+ except ValidationError as e:
191
+ raise ParsingError(
192
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
193
+ )
194
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
195
+
196
+ def list_payouts(
197
+ self,
198
+ *,
199
+ payment_reference_id: typing.Optional[str] = None,
200
+ client_reference_id: typing.Optional[str] = None,
201
+ request_reference_id: typing.Optional[str] = None,
202
+ bank_transaction_reference_id: typing.Optional[str] = None,
203
+ mode: typing.Optional[ListPayoutsRequestMode] = None,
204
+ date_from: typing.Optional[dt.datetime] = None,
205
+ date_to: typing.Optional[dt.datetime] = None,
206
+ status: typing.Optional[ListPayoutsRequestStatus] = None,
207
+ page: typing.Optional[str] = None,
208
+ count: typing.Optional[str] = None,
209
+ request_options: typing.Optional[RequestOptions] = None,
210
+ ) -> HttpResponse[GetPayoutsResponse]:
211
+ """
212
+ Retrieves payout details. Use paymentReferenceId or clientReferenceId
213
+ to fetch a specific payout, or requestReferenceId to fetch all payouts
214
+ associated with a single request. Supports filtering by mode, status,
215
+ and date range.
216
+
217
+ Parameters
218
+ ----------
219
+ payment_reference_id : typing.Optional[str]
220
+ Unique identifier of the payment in Pine Labs database.
221
+
222
+ client_reference_id : typing.Optional[str]
223
+ Unique client reference provided when creating the payout.
224
+
225
+ request_reference_id : typing.Optional[str]
226
+ Unique identifier of the request in Pine Labs database.
227
+
228
+ bank_transaction_reference_id : typing.Optional[str]
229
+ Unique Transaction Reference (UTR) from the bank.
230
+
231
+ mode : typing.Optional[ListPayoutsRequestMode]
232
+ Filter by payment mode.
233
+
234
+ date_from : typing.Optional[dt.datetime]
235
+ Fetch payouts initiated after this date (ISO 8601 UTC).
236
+
237
+ date_to : typing.Optional[dt.datetime]
238
+ Fetch payouts initiated before this date (ISO 8601 UTC).
239
+
240
+ status : typing.Optional[ListPayoutsRequestStatus]
241
+ Filter by payout status.
242
+
243
+ page : typing.Optional[str]
244
+ Page number (default 1).
245
+
246
+ count : typing.Optional[str]
247
+ Number of records per page.
248
+
249
+ request_options : typing.Optional[RequestOptions]
250
+ Request-specific configuration.
251
+
252
+ Returns
253
+ -------
254
+ HttpResponse[GetPayoutsResponse]
255
+ Payout records retrieved successfully.
256
+ """
257
+ _response = self._client_wrapper.httpx_client.request(
258
+ "payouts/v3/payments",
259
+ method="GET",
260
+ params={
261
+ "paymentReferenceId": payment_reference_id,
262
+ "clientReferenceId": client_reference_id,
263
+ "requestReferenceId": request_reference_id,
264
+ "bankTransactionReferenceId": bank_transaction_reference_id,
265
+ "mode": mode,
266
+ "dateFrom": serialize_datetime(date_from) if date_from is not None else None,
267
+ "dateTo": serialize_datetime(date_to) if date_to is not None else None,
268
+ "status": status,
269
+ "page": page,
270
+ "count": count,
271
+ },
272
+ request_options=request_options,
273
+ )
274
+ try:
275
+ if 200 <= _response.status_code < 300:
276
+ _data = typing.cast(
277
+ GetPayoutsResponse,
278
+ parse_obj_as(
279
+ type_=GetPayoutsResponse, # type: ignore
280
+ object_=_response.json(),
281
+ ),
282
+ )
283
+ return HttpResponse(response=_response, data=_data)
284
+ if _response.status_code == 400:
285
+ raise BadRequestError(
286
+ headers=dict(_response.headers),
287
+ body=typing.cast(
288
+ typing.Any,
289
+ parse_obj_as(
290
+ type_=typing.Any, # type: ignore
291
+ object_=_response.json(),
292
+ ),
293
+ ),
294
+ )
295
+ if _response.status_code == 401:
296
+ raise UnauthorizedError(
297
+ headers=dict(_response.headers),
298
+ body=typing.cast(
299
+ ErrorResponse,
300
+ parse_obj_as(
301
+ type_=ErrorResponse, # type: ignore
302
+ object_=_response.json(),
303
+ ),
304
+ ),
305
+ )
306
+ if _response.status_code == 403:
307
+ raise ForbiddenError(
308
+ headers=dict(_response.headers),
309
+ body=typing.cast(
310
+ ErrorResponse,
311
+ parse_obj_as(
312
+ type_=ErrorResponse, # type: ignore
313
+ object_=_response.json(),
314
+ ),
315
+ ),
316
+ )
317
+ if _response.status_code == 500:
318
+ raise InternalServerError(
319
+ headers=dict(_response.headers),
320
+ body=typing.cast(
321
+ ErrorResponse,
322
+ parse_obj_as(
323
+ type_=ErrorResponse, # type: ignore
324
+ object_=_response.json(),
325
+ ),
326
+ ),
327
+ )
328
+ _response_json = _response.json()
329
+ except JSONDecodeError:
330
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
331
+ except ValidationError as e:
332
+ raise ParsingError(
333
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
334
+ )
335
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
336
+
337
+ def get_payout_balance(
338
+ self, *, request_options: typing.Optional[RequestOptions] = None
339
+ ) -> HttpResponse[GetAccountBalanceResponse]:
340
+ """
341
+ Retrieves the funding account balance linked to your Pine Labs Online
342
+ account. This API is only available when you have a funding account
343
+ linked to your Pine Labs Online account.
344
+
345
+ Parameters
346
+ ----------
347
+ request_options : typing.Optional[RequestOptions]
348
+ Request-specific configuration.
349
+
350
+ Returns
351
+ -------
352
+ HttpResponse[GetAccountBalanceResponse]
353
+ Account balance retrieved successfully.
354
+ """
355
+ _response = self._client_wrapper.httpx_client.request(
356
+ "payouts/v3/payments/funding-account",
357
+ method="GET",
358
+ request_options=request_options,
359
+ )
360
+ try:
361
+ if 200 <= _response.status_code < 300:
362
+ _data = typing.cast(
363
+ GetAccountBalanceResponse,
364
+ parse_obj_as(
365
+ type_=GetAccountBalanceResponse, # type: ignore
366
+ object_=_response.json(),
367
+ ),
368
+ )
369
+ return HttpResponse(response=_response, data=_data)
370
+ if _response.status_code == 400:
371
+ raise BadRequestError(
372
+ headers=dict(_response.headers),
373
+ body=typing.cast(
374
+ typing.Any,
375
+ parse_obj_as(
376
+ type_=typing.Any, # type: ignore
377
+ object_=_response.json(),
378
+ ),
379
+ ),
380
+ )
381
+ if _response.status_code == 401:
382
+ raise UnauthorizedError(
383
+ headers=dict(_response.headers),
384
+ body=typing.cast(
385
+ ErrorResponse,
386
+ parse_obj_as(
387
+ type_=ErrorResponse, # type: ignore
388
+ object_=_response.json(),
389
+ ),
390
+ ),
391
+ )
392
+ if _response.status_code == 403:
393
+ raise ForbiddenError(
394
+ headers=dict(_response.headers),
395
+ body=typing.cast(
396
+ ErrorResponse,
397
+ parse_obj_as(
398
+ type_=ErrorResponse, # type: ignore
399
+ object_=_response.json(),
400
+ ),
401
+ ),
402
+ )
403
+ if _response.status_code == 500:
404
+ raise InternalServerError(
405
+ headers=dict(_response.headers),
406
+ body=typing.cast(
407
+ ErrorResponse,
408
+ parse_obj_as(
409
+ type_=ErrorResponse, # type: ignore
410
+ object_=_response.json(),
411
+ ),
412
+ ),
413
+ )
414
+ _response_json = _response.json()
415
+ except JSONDecodeError:
416
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
417
+ except ValidationError as e:
418
+ raise ParsingError(
419
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
420
+ )
421
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
422
+
423
+ def create_bulk_payout(
424
+ self, *, file: bytes, request_options: typing.Optional[RequestOptions] = None
425
+ ) -> HttpResponse[CreateBulkPayoutResponse]:
426
+ """
427
+ Creates multiple payouts in bulk by uploading a file containing
428
+ beneficiary account details. The file is processed asynchronously.
429
+ Use the Get Payouts API with the returned requestReferenceId to
430
+ track individual payout statuses.
431
+
432
+ Parameters
433
+ ----------
434
+ file : bytes
435
+ File containing beneficiary account details for bulk payout processing.
436
+
437
+ request_options : typing.Optional[RequestOptions]
438
+ Request-specific configuration.
439
+
440
+ Returns
441
+ -------
442
+ HttpResponse[CreateBulkPayoutResponse]
443
+ Bulk payout file accepted and processing initiated.
444
+ """
445
+ _response = self._client_wrapper.httpx_client.request(
446
+ "payouts/v3/payments/banks/file",
447
+ method="POST",
448
+ data={
449
+ "file": file,
450
+ },
451
+ headers={
452
+ "content-type": "application/x-www-form-urlencoded",
453
+ },
454
+ request_options=request_options,
455
+ omit=OMIT,
456
+ )
457
+ try:
458
+ if 200 <= _response.status_code < 300:
459
+ _data = typing.cast(
460
+ CreateBulkPayoutResponse,
461
+ parse_obj_as(
462
+ type_=CreateBulkPayoutResponse, # type: ignore
463
+ object_=_response.json(),
464
+ ),
465
+ )
466
+ return HttpResponse(response=_response, data=_data)
467
+ if _response.status_code == 400:
468
+ raise BadRequestError(
469
+ headers=dict(_response.headers),
470
+ body=typing.cast(
471
+ typing.Any,
472
+ parse_obj_as(
473
+ type_=typing.Any, # type: ignore
474
+ object_=_response.json(),
475
+ ),
476
+ ),
477
+ )
478
+ if _response.status_code == 401:
479
+ raise UnauthorizedError(
480
+ headers=dict(_response.headers),
481
+ body=typing.cast(
482
+ ErrorResponse,
483
+ parse_obj_as(
484
+ type_=ErrorResponse, # type: ignore
485
+ object_=_response.json(),
486
+ ),
487
+ ),
488
+ )
489
+ if _response.status_code == 403:
490
+ raise ForbiddenError(
491
+ headers=dict(_response.headers),
492
+ body=typing.cast(
493
+ ErrorResponse,
494
+ parse_obj_as(
495
+ type_=ErrorResponse, # type: ignore
496
+ object_=_response.json(),
497
+ ),
498
+ ),
499
+ )
500
+ if _response.status_code == 500:
501
+ raise InternalServerError(
502
+ headers=dict(_response.headers),
503
+ body=typing.cast(
504
+ ErrorResponse,
505
+ parse_obj_as(
506
+ type_=ErrorResponse, # type: ignore
507
+ object_=_response.json(),
508
+ ),
509
+ ),
510
+ )
511
+ _response_json = _response.json()
512
+ except JSONDecodeError:
513
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
514
+ except ValidationError as e:
515
+ raise ParsingError(
516
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
517
+ )
518
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
519
+
520
+ def update_scheduled_payout(
521
+ self,
522
+ payment_reference_id: str,
523
+ *,
524
+ schedule_at: typing.Optional[dt.datetime] = OMIT,
525
+ request_options: typing.Optional[RequestOptions] = None,
526
+ ) -> HttpResponse[PayoutDetail]:
527
+ """
528
+ Updates the scheduled date of a payout. Only payouts with status
529
+ SCHEDULED can be updated. Provide the new schedule date in
530
+ ISO 8601 UTC format.
531
+
532
+ Parameters
533
+ ----------
534
+ payment_reference_id : str
535
+ Unique identifier of the payment in Pine Labs database.
536
+
537
+ schedule_at : typing.Optional[dt.datetime]
538
+ New scheduled time for executing the payout (ISO 8601 UTC).
539
+
540
+ request_options : typing.Optional[RequestOptions]
541
+ Request-specific configuration.
542
+
543
+ Returns
544
+ -------
545
+ HttpResponse[PayoutDetail]
546
+ Payout schedule updated successfully.
547
+ """
548
+ _response = self._client_wrapper.httpx_client.request(
549
+ f"payouts/v3/payments/banks/{encode_path_param(payment_reference_id)}",
550
+ method="PUT",
551
+ json={
552
+ "scheduleAt": schedule_at,
553
+ },
554
+ headers={
555
+ "content-type": "application/json",
556
+ },
557
+ request_options=request_options,
558
+ omit=OMIT,
559
+ )
560
+ try:
561
+ if 200 <= _response.status_code < 300:
562
+ _data = typing.cast(
563
+ PayoutDetail,
564
+ parse_obj_as(
565
+ type_=PayoutDetail, # type: ignore
566
+ object_=_response.json(),
567
+ ),
568
+ )
569
+ return HttpResponse(response=_response, data=_data)
570
+ if _response.status_code == 400:
571
+ raise BadRequestError(
572
+ headers=dict(_response.headers),
573
+ body=typing.cast(
574
+ typing.Any,
575
+ parse_obj_as(
576
+ type_=typing.Any, # type: ignore
577
+ object_=_response.json(),
578
+ ),
579
+ ),
580
+ )
581
+ if _response.status_code == 401:
582
+ raise UnauthorizedError(
583
+ headers=dict(_response.headers),
584
+ body=typing.cast(
585
+ ErrorResponse,
586
+ parse_obj_as(
587
+ type_=ErrorResponse, # type: ignore
588
+ object_=_response.json(),
589
+ ),
590
+ ),
591
+ )
592
+ if _response.status_code == 403:
593
+ raise ForbiddenError(
594
+ headers=dict(_response.headers),
595
+ body=typing.cast(
596
+ ErrorResponse,
597
+ parse_obj_as(
598
+ type_=ErrorResponse, # type: ignore
599
+ object_=_response.json(),
600
+ ),
601
+ ),
602
+ )
603
+ if _response.status_code == 404:
604
+ raise NotFoundError(
605
+ headers=dict(_response.headers),
606
+ body=typing.cast(
607
+ ErrorResponse,
608
+ parse_obj_as(
609
+ type_=ErrorResponse, # type: ignore
610
+ object_=_response.json(),
611
+ ),
612
+ ),
613
+ )
614
+ if _response.status_code == 500:
615
+ raise InternalServerError(
616
+ headers=dict(_response.headers),
617
+ body=typing.cast(
618
+ ErrorResponse,
619
+ parse_obj_as(
620
+ type_=ErrorResponse, # type: ignore
621
+ object_=_response.json(),
622
+ ),
623
+ ),
624
+ )
625
+ _response_json = _response.json()
626
+ except JSONDecodeError:
627
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
628
+ except ValidationError as e:
629
+ raise ParsingError(
630
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
631
+ )
632
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
633
+
634
+ def cancel_scheduled_payout(
635
+ self, payment_reference_id: str, *, request_options: typing.Optional[RequestOptions] = None
636
+ ) -> HttpResponse[PayoutDetail]:
637
+ """
638
+ Cancels a scheduled payout. Only payouts with status SCHEDULED
639
+ can be cancelled. Once cancelled, the payout cannot be reinstated.
640
+
641
+ Parameters
642
+ ----------
643
+ payment_reference_id : str
644
+ Unique identifier of the payment in Pine Labs database.
645
+
646
+ request_options : typing.Optional[RequestOptions]
647
+ Request-specific configuration.
648
+
649
+ Returns
650
+ -------
651
+ HttpResponse[PayoutDetail]
652
+ Payout cancelled successfully.
653
+ """
654
+ _response = self._client_wrapper.httpx_client.request(
655
+ f"payouts/v3/payments/banks/{encode_path_param(payment_reference_id)}/cancel",
656
+ method="PUT",
657
+ request_options=request_options,
658
+ )
659
+ try:
660
+ if 200 <= _response.status_code < 300:
661
+ _data = typing.cast(
662
+ PayoutDetail,
663
+ parse_obj_as(
664
+ type_=PayoutDetail, # type: ignore
665
+ object_=_response.json(),
666
+ ),
667
+ )
668
+ return HttpResponse(response=_response, data=_data)
669
+ if _response.status_code == 400:
670
+ raise BadRequestError(
671
+ headers=dict(_response.headers),
672
+ body=typing.cast(
673
+ typing.Any,
674
+ parse_obj_as(
675
+ type_=typing.Any, # type: ignore
676
+ object_=_response.json(),
677
+ ),
678
+ ),
679
+ )
680
+ if _response.status_code == 401:
681
+ raise UnauthorizedError(
682
+ headers=dict(_response.headers),
683
+ body=typing.cast(
684
+ ErrorResponse,
685
+ parse_obj_as(
686
+ type_=ErrorResponse, # type: ignore
687
+ object_=_response.json(),
688
+ ),
689
+ ),
690
+ )
691
+ if _response.status_code == 403:
692
+ raise ForbiddenError(
693
+ headers=dict(_response.headers),
694
+ body=typing.cast(
695
+ ErrorResponse,
696
+ parse_obj_as(
697
+ type_=ErrorResponse, # type: ignore
698
+ object_=_response.json(),
699
+ ),
700
+ ),
701
+ )
702
+ if _response.status_code == 404:
703
+ raise NotFoundError(
704
+ headers=dict(_response.headers),
705
+ body=typing.cast(
706
+ ErrorResponse,
707
+ parse_obj_as(
708
+ type_=ErrorResponse, # type: ignore
709
+ object_=_response.json(),
710
+ ),
711
+ ),
712
+ )
713
+ if _response.status_code == 500:
714
+ raise InternalServerError(
715
+ headers=dict(_response.headers),
716
+ body=typing.cast(
717
+ ErrorResponse,
718
+ parse_obj_as(
719
+ type_=ErrorResponse, # type: ignore
720
+ object_=_response.json(),
721
+ ),
722
+ ),
723
+ )
724
+ _response_json = _response.json()
725
+ except JSONDecodeError:
726
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
727
+ except ValidationError as e:
728
+ raise ParsingError(
729
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
730
+ )
731
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
732
+
733
+
734
+ class AsyncRawPayoutsClient:
735
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
736
+ self._client_wrapper = client_wrapper
737
+
738
+ async def create_payout(
739
+ self,
740
+ *,
741
+ client_reference_id: str,
742
+ payee_name: str,
743
+ amount: PayoutAmount,
744
+ mode: CreatePayoutRequestMode,
745
+ remarks: str,
746
+ email: typing.Optional[str] = OMIT,
747
+ phone: typing.Optional[str] = OMIT,
748
+ account_number: typing.Optional[str] = OMIT,
749
+ branch_code: typing.Optional[str] = OMIT,
750
+ request_options: typing.Optional[RequestOptions] = None,
751
+ ) -> AsyncHttpResponse[CreatePayoutResponse]:
752
+ """
753
+ Creates a single payout to a beneficiary's bank account or UPI VPA.
754
+ Supports IMPS, NEFT, RTGS, and UPI payment modes.
755
+
756
+ For IMPS/NEFT/RTGS, provide accountNumber and branchCode.
757
+ For UPI, provide vpa instead.
758
+
759
+ Parameters
760
+ ----------
761
+ client_reference_id : str
762
+ Unique identifier to track the payout. Must not contain spaces. **Acts as the idempotency key** — duplicate requests with the same `clientReferenceId` will not create a new payout.
763
+
764
+ payee_name : str
765
+ Name of the beneficiary's bank account holder. Alphabets and spaces only.
766
+
767
+ amount : PayoutAmount
768
+
769
+ mode : CreatePayoutRequestMode
770
+ Mode of payment for the payout.
771
+
772
+ remarks : str
773
+ Description or reference text for the transaction. Supported characters A-Z, a-z, 0-9, hyphen, space.
774
+
775
+ email : typing.Optional[str]
776
+ Email address of the beneficiary.
777
+
778
+ phone : typing.Optional[str]
779
+ Mobile number of the beneficiary (10 numeric digits).
780
+
781
+ account_number : typing.Optional[str]
782
+ Beneficiary's bank account number. Mandatory for IMPS, NEFT, and RTGS.
783
+
784
+ branch_code : typing.Optional[str]
785
+ Beneficiary's bank IFSC code. Mandatory for IMPS, NEFT, and RTGS.
786
+ First 4 characters alphabets, 5th character must be 0, remaining alphanumeric.
787
+
788
+ request_options : typing.Optional[RequestOptions]
789
+ Request-specific configuration.
790
+
791
+ Returns
792
+ -------
793
+ AsyncHttpResponse[CreatePayoutResponse]
794
+ Payout created and scheduled successfully.
795
+ """
796
+ _response = await self._client_wrapper.httpx_client.request(
797
+ "payouts/v3/payments/banks",
798
+ method="POST",
799
+ json={
800
+ "clientReferenceId": client_reference_id,
801
+ "payeeName": payee_name,
802
+ "email": email,
803
+ "phone": phone,
804
+ "accountNumber": account_number,
805
+ "branchCode": branch_code,
806
+ "amount": convert_and_respect_annotation_metadata(
807
+ object_=amount, annotation=PayoutAmount, direction="write"
808
+ ),
809
+ "mode": mode,
810
+ "remarks": remarks,
811
+ },
812
+ headers={
813
+ "content-type": "application/json",
814
+ },
815
+ request_options=request_options,
816
+ omit=OMIT,
817
+ )
818
+ try:
819
+ if 200 <= _response.status_code < 300:
820
+ _data = typing.cast(
821
+ CreatePayoutResponse,
822
+ parse_obj_as(
823
+ type_=CreatePayoutResponse, # type: ignore
824
+ object_=_response.json(),
825
+ ),
826
+ )
827
+ return AsyncHttpResponse(response=_response, data=_data)
828
+ if _response.status_code == 400:
829
+ raise BadRequestError(
830
+ headers=dict(_response.headers),
831
+ body=typing.cast(
832
+ typing.Any,
833
+ parse_obj_as(
834
+ type_=typing.Any, # type: ignore
835
+ object_=_response.json(),
836
+ ),
837
+ ),
838
+ )
839
+ if _response.status_code == 401:
840
+ raise UnauthorizedError(
841
+ headers=dict(_response.headers),
842
+ body=typing.cast(
843
+ ErrorResponse,
844
+ parse_obj_as(
845
+ type_=ErrorResponse, # type: ignore
846
+ object_=_response.json(),
847
+ ),
848
+ ),
849
+ )
850
+ if _response.status_code == 403:
851
+ raise ForbiddenError(
852
+ headers=dict(_response.headers),
853
+ body=typing.cast(
854
+ ErrorResponse,
855
+ parse_obj_as(
856
+ type_=ErrorResponse, # type: ignore
857
+ object_=_response.json(),
858
+ ),
859
+ ),
860
+ )
861
+ if _response.status_code == 409:
862
+ raise ConflictError(
863
+ headers=dict(_response.headers),
864
+ body=typing.cast(
865
+ ErrorResponse,
866
+ parse_obj_as(
867
+ type_=ErrorResponse, # type: ignore
868
+ object_=_response.json(),
869
+ ),
870
+ ),
871
+ )
872
+ if _response.status_code == 500:
873
+ raise InternalServerError(
874
+ headers=dict(_response.headers),
875
+ body=typing.cast(
876
+ ErrorResponse,
877
+ parse_obj_as(
878
+ type_=ErrorResponse, # type: ignore
879
+ object_=_response.json(),
880
+ ),
881
+ ),
882
+ )
883
+ _response_json = _response.json()
884
+ except JSONDecodeError:
885
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
886
+ except ValidationError as e:
887
+ raise ParsingError(
888
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
889
+ )
890
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
891
+
892
+ async def list_payouts(
893
+ self,
894
+ *,
895
+ payment_reference_id: typing.Optional[str] = None,
896
+ client_reference_id: typing.Optional[str] = None,
897
+ request_reference_id: typing.Optional[str] = None,
898
+ bank_transaction_reference_id: typing.Optional[str] = None,
899
+ mode: typing.Optional[ListPayoutsRequestMode] = None,
900
+ date_from: typing.Optional[dt.datetime] = None,
901
+ date_to: typing.Optional[dt.datetime] = None,
902
+ status: typing.Optional[ListPayoutsRequestStatus] = None,
903
+ page: typing.Optional[str] = None,
904
+ count: typing.Optional[str] = None,
905
+ request_options: typing.Optional[RequestOptions] = None,
906
+ ) -> AsyncHttpResponse[GetPayoutsResponse]:
907
+ """
908
+ Retrieves payout details. Use paymentReferenceId or clientReferenceId
909
+ to fetch a specific payout, or requestReferenceId to fetch all payouts
910
+ associated with a single request. Supports filtering by mode, status,
911
+ and date range.
912
+
913
+ Parameters
914
+ ----------
915
+ payment_reference_id : typing.Optional[str]
916
+ Unique identifier of the payment in Pine Labs database.
917
+
918
+ client_reference_id : typing.Optional[str]
919
+ Unique client reference provided when creating the payout.
920
+
921
+ request_reference_id : typing.Optional[str]
922
+ Unique identifier of the request in Pine Labs database.
923
+
924
+ bank_transaction_reference_id : typing.Optional[str]
925
+ Unique Transaction Reference (UTR) from the bank.
926
+
927
+ mode : typing.Optional[ListPayoutsRequestMode]
928
+ Filter by payment mode.
929
+
930
+ date_from : typing.Optional[dt.datetime]
931
+ Fetch payouts initiated after this date (ISO 8601 UTC).
932
+
933
+ date_to : typing.Optional[dt.datetime]
934
+ Fetch payouts initiated before this date (ISO 8601 UTC).
935
+
936
+ status : typing.Optional[ListPayoutsRequestStatus]
937
+ Filter by payout status.
938
+
939
+ page : typing.Optional[str]
940
+ Page number (default 1).
941
+
942
+ count : typing.Optional[str]
943
+ Number of records per page.
944
+
945
+ request_options : typing.Optional[RequestOptions]
946
+ Request-specific configuration.
947
+
948
+ Returns
949
+ -------
950
+ AsyncHttpResponse[GetPayoutsResponse]
951
+ Payout records retrieved successfully.
952
+ """
953
+ _response = await self._client_wrapper.httpx_client.request(
954
+ "payouts/v3/payments",
955
+ method="GET",
956
+ params={
957
+ "paymentReferenceId": payment_reference_id,
958
+ "clientReferenceId": client_reference_id,
959
+ "requestReferenceId": request_reference_id,
960
+ "bankTransactionReferenceId": bank_transaction_reference_id,
961
+ "mode": mode,
962
+ "dateFrom": serialize_datetime(date_from) if date_from is not None else None,
963
+ "dateTo": serialize_datetime(date_to) if date_to is not None else None,
964
+ "status": status,
965
+ "page": page,
966
+ "count": count,
967
+ },
968
+ request_options=request_options,
969
+ )
970
+ try:
971
+ if 200 <= _response.status_code < 300:
972
+ _data = typing.cast(
973
+ GetPayoutsResponse,
974
+ parse_obj_as(
975
+ type_=GetPayoutsResponse, # type: ignore
976
+ object_=_response.json(),
977
+ ),
978
+ )
979
+ return AsyncHttpResponse(response=_response, data=_data)
980
+ if _response.status_code == 400:
981
+ raise BadRequestError(
982
+ headers=dict(_response.headers),
983
+ body=typing.cast(
984
+ typing.Any,
985
+ parse_obj_as(
986
+ type_=typing.Any, # type: ignore
987
+ object_=_response.json(),
988
+ ),
989
+ ),
990
+ )
991
+ if _response.status_code == 401:
992
+ raise UnauthorizedError(
993
+ headers=dict(_response.headers),
994
+ body=typing.cast(
995
+ ErrorResponse,
996
+ parse_obj_as(
997
+ type_=ErrorResponse, # type: ignore
998
+ object_=_response.json(),
999
+ ),
1000
+ ),
1001
+ )
1002
+ if _response.status_code == 403:
1003
+ raise ForbiddenError(
1004
+ headers=dict(_response.headers),
1005
+ body=typing.cast(
1006
+ ErrorResponse,
1007
+ parse_obj_as(
1008
+ type_=ErrorResponse, # type: ignore
1009
+ object_=_response.json(),
1010
+ ),
1011
+ ),
1012
+ )
1013
+ if _response.status_code == 500:
1014
+ raise InternalServerError(
1015
+ headers=dict(_response.headers),
1016
+ body=typing.cast(
1017
+ ErrorResponse,
1018
+ parse_obj_as(
1019
+ type_=ErrorResponse, # type: ignore
1020
+ object_=_response.json(),
1021
+ ),
1022
+ ),
1023
+ )
1024
+ _response_json = _response.json()
1025
+ except JSONDecodeError:
1026
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1027
+ except ValidationError as e:
1028
+ raise ParsingError(
1029
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1030
+ )
1031
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1032
+
1033
+ async def get_payout_balance(
1034
+ self, *, request_options: typing.Optional[RequestOptions] = None
1035
+ ) -> AsyncHttpResponse[GetAccountBalanceResponse]:
1036
+ """
1037
+ Retrieves the funding account balance linked to your Pine Labs Online
1038
+ account. This API is only available when you have a funding account
1039
+ linked to your Pine Labs Online account.
1040
+
1041
+ Parameters
1042
+ ----------
1043
+ request_options : typing.Optional[RequestOptions]
1044
+ Request-specific configuration.
1045
+
1046
+ Returns
1047
+ -------
1048
+ AsyncHttpResponse[GetAccountBalanceResponse]
1049
+ Account balance retrieved successfully.
1050
+ """
1051
+ _response = await self._client_wrapper.httpx_client.request(
1052
+ "payouts/v3/payments/funding-account",
1053
+ method="GET",
1054
+ request_options=request_options,
1055
+ )
1056
+ try:
1057
+ if 200 <= _response.status_code < 300:
1058
+ _data = typing.cast(
1059
+ GetAccountBalanceResponse,
1060
+ parse_obj_as(
1061
+ type_=GetAccountBalanceResponse, # type: ignore
1062
+ object_=_response.json(),
1063
+ ),
1064
+ )
1065
+ return AsyncHttpResponse(response=_response, data=_data)
1066
+ if _response.status_code == 400:
1067
+ raise BadRequestError(
1068
+ headers=dict(_response.headers),
1069
+ body=typing.cast(
1070
+ typing.Any,
1071
+ parse_obj_as(
1072
+ type_=typing.Any, # type: ignore
1073
+ object_=_response.json(),
1074
+ ),
1075
+ ),
1076
+ )
1077
+ if _response.status_code == 401:
1078
+ raise UnauthorizedError(
1079
+ headers=dict(_response.headers),
1080
+ body=typing.cast(
1081
+ ErrorResponse,
1082
+ parse_obj_as(
1083
+ type_=ErrorResponse, # type: ignore
1084
+ object_=_response.json(),
1085
+ ),
1086
+ ),
1087
+ )
1088
+ if _response.status_code == 403:
1089
+ raise ForbiddenError(
1090
+ headers=dict(_response.headers),
1091
+ body=typing.cast(
1092
+ ErrorResponse,
1093
+ parse_obj_as(
1094
+ type_=ErrorResponse, # type: ignore
1095
+ object_=_response.json(),
1096
+ ),
1097
+ ),
1098
+ )
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 create_bulk_payout(
1120
+ self, *, file: bytes, request_options: typing.Optional[RequestOptions] = None
1121
+ ) -> AsyncHttpResponse[CreateBulkPayoutResponse]:
1122
+ """
1123
+ Creates multiple payouts in bulk by uploading a file containing
1124
+ beneficiary account details. The file is processed asynchronously.
1125
+ Use the Get Payouts API with the returned requestReferenceId to
1126
+ track individual payout statuses.
1127
+
1128
+ Parameters
1129
+ ----------
1130
+ file : bytes
1131
+ File containing beneficiary account details for bulk payout processing.
1132
+
1133
+ request_options : typing.Optional[RequestOptions]
1134
+ Request-specific configuration.
1135
+
1136
+ Returns
1137
+ -------
1138
+ AsyncHttpResponse[CreateBulkPayoutResponse]
1139
+ Bulk payout file accepted and processing initiated.
1140
+ """
1141
+ _response = await self._client_wrapper.httpx_client.request(
1142
+ "payouts/v3/payments/banks/file",
1143
+ method="POST",
1144
+ data={
1145
+ "file": file,
1146
+ },
1147
+ headers={
1148
+ "content-type": "application/x-www-form-urlencoded",
1149
+ },
1150
+ request_options=request_options,
1151
+ omit=OMIT,
1152
+ )
1153
+ try:
1154
+ if 200 <= _response.status_code < 300:
1155
+ _data = typing.cast(
1156
+ CreateBulkPayoutResponse,
1157
+ parse_obj_as(
1158
+ type_=CreateBulkPayoutResponse, # type: ignore
1159
+ object_=_response.json(),
1160
+ ),
1161
+ )
1162
+ return AsyncHttpResponse(response=_response, data=_data)
1163
+ if _response.status_code == 400:
1164
+ raise BadRequestError(
1165
+ headers=dict(_response.headers),
1166
+ body=typing.cast(
1167
+ typing.Any,
1168
+ parse_obj_as(
1169
+ type_=typing.Any, # type: ignore
1170
+ object_=_response.json(),
1171
+ ),
1172
+ ),
1173
+ )
1174
+ if _response.status_code == 401:
1175
+ raise UnauthorizedError(
1176
+ headers=dict(_response.headers),
1177
+ body=typing.cast(
1178
+ ErrorResponse,
1179
+ parse_obj_as(
1180
+ type_=ErrorResponse, # type: ignore
1181
+ object_=_response.json(),
1182
+ ),
1183
+ ),
1184
+ )
1185
+ if _response.status_code == 403:
1186
+ raise ForbiddenError(
1187
+ headers=dict(_response.headers),
1188
+ body=typing.cast(
1189
+ ErrorResponse,
1190
+ parse_obj_as(
1191
+ type_=ErrorResponse, # type: ignore
1192
+ object_=_response.json(),
1193
+ ),
1194
+ ),
1195
+ )
1196
+ if _response.status_code == 500:
1197
+ raise InternalServerError(
1198
+ headers=dict(_response.headers),
1199
+ body=typing.cast(
1200
+ ErrorResponse,
1201
+ parse_obj_as(
1202
+ type_=ErrorResponse, # type: ignore
1203
+ object_=_response.json(),
1204
+ ),
1205
+ ),
1206
+ )
1207
+ _response_json = _response.json()
1208
+ except JSONDecodeError:
1209
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1210
+ except ValidationError as e:
1211
+ raise ParsingError(
1212
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1213
+ )
1214
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1215
+
1216
+ async def update_scheduled_payout(
1217
+ self,
1218
+ payment_reference_id: str,
1219
+ *,
1220
+ schedule_at: typing.Optional[dt.datetime] = OMIT,
1221
+ request_options: typing.Optional[RequestOptions] = None,
1222
+ ) -> AsyncHttpResponse[PayoutDetail]:
1223
+ """
1224
+ Updates the scheduled date of a payout. Only payouts with status
1225
+ SCHEDULED can be updated. Provide the new schedule date in
1226
+ ISO 8601 UTC format.
1227
+
1228
+ Parameters
1229
+ ----------
1230
+ payment_reference_id : str
1231
+ Unique identifier of the payment in Pine Labs database.
1232
+
1233
+ schedule_at : typing.Optional[dt.datetime]
1234
+ New scheduled time for executing the payout (ISO 8601 UTC).
1235
+
1236
+ request_options : typing.Optional[RequestOptions]
1237
+ Request-specific configuration.
1238
+
1239
+ Returns
1240
+ -------
1241
+ AsyncHttpResponse[PayoutDetail]
1242
+ Payout schedule updated successfully.
1243
+ """
1244
+ _response = await self._client_wrapper.httpx_client.request(
1245
+ f"payouts/v3/payments/banks/{encode_path_param(payment_reference_id)}",
1246
+ method="PUT",
1247
+ json={
1248
+ "scheduleAt": schedule_at,
1249
+ },
1250
+ headers={
1251
+ "content-type": "application/json",
1252
+ },
1253
+ request_options=request_options,
1254
+ omit=OMIT,
1255
+ )
1256
+ try:
1257
+ if 200 <= _response.status_code < 300:
1258
+ _data = typing.cast(
1259
+ PayoutDetail,
1260
+ parse_obj_as(
1261
+ type_=PayoutDetail, # type: ignore
1262
+ object_=_response.json(),
1263
+ ),
1264
+ )
1265
+ return AsyncHttpResponse(response=_response, data=_data)
1266
+ if _response.status_code == 400:
1267
+ raise BadRequestError(
1268
+ headers=dict(_response.headers),
1269
+ body=typing.cast(
1270
+ typing.Any,
1271
+ parse_obj_as(
1272
+ type_=typing.Any, # type: ignore
1273
+ object_=_response.json(),
1274
+ ),
1275
+ ),
1276
+ )
1277
+ if _response.status_code == 401:
1278
+ raise UnauthorizedError(
1279
+ headers=dict(_response.headers),
1280
+ body=typing.cast(
1281
+ ErrorResponse,
1282
+ parse_obj_as(
1283
+ type_=ErrorResponse, # type: ignore
1284
+ object_=_response.json(),
1285
+ ),
1286
+ ),
1287
+ )
1288
+ if _response.status_code == 403:
1289
+ raise ForbiddenError(
1290
+ headers=dict(_response.headers),
1291
+ body=typing.cast(
1292
+ ErrorResponse,
1293
+ parse_obj_as(
1294
+ type_=ErrorResponse, # type: ignore
1295
+ object_=_response.json(),
1296
+ ),
1297
+ ),
1298
+ )
1299
+ if _response.status_code == 404:
1300
+ raise NotFoundError(
1301
+ headers=dict(_response.headers),
1302
+ body=typing.cast(
1303
+ ErrorResponse,
1304
+ parse_obj_as(
1305
+ type_=ErrorResponse, # type: ignore
1306
+ object_=_response.json(),
1307
+ ),
1308
+ ),
1309
+ )
1310
+ if _response.status_code == 500:
1311
+ raise InternalServerError(
1312
+ headers=dict(_response.headers),
1313
+ body=typing.cast(
1314
+ ErrorResponse,
1315
+ parse_obj_as(
1316
+ type_=ErrorResponse, # type: ignore
1317
+ object_=_response.json(),
1318
+ ),
1319
+ ),
1320
+ )
1321
+ _response_json = _response.json()
1322
+ except JSONDecodeError:
1323
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1324
+ except ValidationError as e:
1325
+ raise ParsingError(
1326
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1327
+ )
1328
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1329
+
1330
+ async def cancel_scheduled_payout(
1331
+ self, payment_reference_id: str, *, request_options: typing.Optional[RequestOptions] = None
1332
+ ) -> AsyncHttpResponse[PayoutDetail]:
1333
+ """
1334
+ Cancels a scheduled payout. Only payouts with status SCHEDULED
1335
+ can be cancelled. Once cancelled, the payout cannot be reinstated.
1336
+
1337
+ Parameters
1338
+ ----------
1339
+ payment_reference_id : str
1340
+ Unique identifier of the payment in Pine Labs database.
1341
+
1342
+ request_options : typing.Optional[RequestOptions]
1343
+ Request-specific configuration.
1344
+
1345
+ Returns
1346
+ -------
1347
+ AsyncHttpResponse[PayoutDetail]
1348
+ Payout cancelled successfully.
1349
+ """
1350
+ _response = await self._client_wrapper.httpx_client.request(
1351
+ f"payouts/v3/payments/banks/{encode_path_param(payment_reference_id)}/cancel",
1352
+ method="PUT",
1353
+ request_options=request_options,
1354
+ )
1355
+ try:
1356
+ if 200 <= _response.status_code < 300:
1357
+ _data = typing.cast(
1358
+ PayoutDetail,
1359
+ parse_obj_as(
1360
+ type_=PayoutDetail, # type: ignore
1361
+ object_=_response.json(),
1362
+ ),
1363
+ )
1364
+ return AsyncHttpResponse(response=_response, data=_data)
1365
+ if _response.status_code == 400:
1366
+ raise BadRequestError(
1367
+ headers=dict(_response.headers),
1368
+ body=typing.cast(
1369
+ typing.Any,
1370
+ parse_obj_as(
1371
+ type_=typing.Any, # type: ignore
1372
+ object_=_response.json(),
1373
+ ),
1374
+ ),
1375
+ )
1376
+ if _response.status_code == 401:
1377
+ raise UnauthorizedError(
1378
+ headers=dict(_response.headers),
1379
+ body=typing.cast(
1380
+ ErrorResponse,
1381
+ parse_obj_as(
1382
+ type_=ErrorResponse, # type: ignore
1383
+ object_=_response.json(),
1384
+ ),
1385
+ ),
1386
+ )
1387
+ if _response.status_code == 403:
1388
+ raise ForbiddenError(
1389
+ headers=dict(_response.headers),
1390
+ body=typing.cast(
1391
+ ErrorResponse,
1392
+ parse_obj_as(
1393
+ type_=ErrorResponse, # type: ignore
1394
+ object_=_response.json(),
1395
+ ),
1396
+ ),
1397
+ )
1398
+ if _response.status_code == 404:
1399
+ raise NotFoundError(
1400
+ headers=dict(_response.headers),
1401
+ body=typing.cast(
1402
+ ErrorResponse,
1403
+ parse_obj_as(
1404
+ type_=ErrorResponse, # type: ignore
1405
+ object_=_response.json(),
1406
+ ),
1407
+ ),
1408
+ )
1409
+ if _response.status_code == 500:
1410
+ raise InternalServerError(
1411
+ headers=dict(_response.headers),
1412
+ body=typing.cast(
1413
+ ErrorResponse,
1414
+ parse_obj_as(
1415
+ type_=ErrorResponse, # type: ignore
1416
+ object_=_response.json(),
1417
+ ),
1418
+ ),
1419
+ )
1420
+ _response_json = _response.json()
1421
+ except JSONDecodeError:
1422
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1423
+ except ValidationError as e:
1424
+ raise ParsingError(
1425
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1426
+ )
1427
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)