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,1085 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import encode_path_param
10
+ from ..core.parse_error import ParsingError
11
+ from ..core.pydantic_utilities import parse_obj_as
12
+ from ..core.request_options import RequestOptions
13
+ from ..core.serialization import convert_and_respect_annotation_metadata
14
+ from ..errors.bad_request_error import BadRequestError
15
+ from ..errors.internal_server_error import InternalServerError
16
+ from ..errors.not_found_error import NotFoundError
17
+ from ..errors.service_unavailable_error import ServiceUnavailableError
18
+ from ..errors.unauthorized_error import UnauthorizedError
19
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
20
+ from ..types.bnpl_resend_otp_response import BnplResendOtpResponse
21
+ from ..types.bnpl_submit_otp_response import BnplSubmitOtpResponse
22
+ from ..types.card_detail_lookup_item import CardDetailLookupItem
23
+ from ..types.error_response import ErrorResponse
24
+ from ..types.get_card_details_response import GetCardDetailsResponse
25
+ from ..types.order_response import OrderResponse
26
+ from ..types.otp_generate_response import OtpGenerateResponse
27
+ from ..types.payment_request_item import PaymentRequestItem
28
+ from pydantic import ValidationError
29
+
30
+ # this is used as the default value for optional parameters
31
+ OMIT = typing.cast(typing.Any, ...)
32
+
33
+
34
+ class RawCardPaymentsClient:
35
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
36
+ self._client_wrapper = client_wrapper
37
+
38
+ def create_payment(
39
+ self,
40
+ order_id: str,
41
+ *,
42
+ payments: typing.Sequence[PaymentRequestItem],
43
+ request_options: typing.Optional[RequestOptions] = None,
44
+ ) -> HttpResponse[OrderResponse]:
45
+ """
46
+ Create a payment against an existing order. This unified endpoint supports
47
+ multiple payment methods differentiated by the `payment_method` field:
48
+
49
+ - **CARD** — Pay with card number or card token (see Card Payments documentation)
50
+ - **UPI** — Pay via UPI Collect or UPI Intent/QR (see UPI Payments documentation)
51
+ - **NETBANKING** — Pay via net banking redirect (see Net Banking documentation)
52
+ - **WALLET** — Pay via digital wallet (see Wallet documentation)
53
+ - **EMI** — Pay via Credit/Debit EMI or Cardless EMI (see Affordability Suite documentation)
54
+ - **BNPL** — Pay via Buy Now Pay Later (see BNPL documentation)
55
+
56
+ The response returns the full order object with the payment linked.
57
+ For redirect-based flows (NetBanking, Wallet, UPI Intent), use the
58
+ `challenge_url` in the response to redirect the customer.
59
+
60
+ Parameters
61
+ ----------
62
+ order_id : str
63
+ Unique identifier of the order in the Pine Labs Online database.
64
+
65
+ payments : typing.Sequence[PaymentRequestItem]
66
+ Array of payment items. Typically contains a single item.
67
+
68
+ request_options : typing.Optional[RequestOptions]
69
+ Request-specific configuration.
70
+
71
+ Returns
72
+ -------
73
+ HttpResponse[OrderResponse]
74
+ Payment created successfully. Returns the full order with payment details.
75
+ """
76
+ _response = self._client_wrapper.httpx_client.request(
77
+ f"api/pay/v1/orders/{encode_path_param(order_id)}/payments",
78
+ method="POST",
79
+ json={
80
+ "payments": convert_and_respect_annotation_metadata(
81
+ object_=payments, annotation=typing.Sequence[PaymentRequestItem], direction="write"
82
+ ),
83
+ },
84
+ headers={
85
+ "content-type": "application/json",
86
+ },
87
+ request_options=request_options,
88
+ omit=OMIT,
89
+ )
90
+ try:
91
+ if 200 <= _response.status_code < 300:
92
+ _data = typing.cast(
93
+ OrderResponse,
94
+ parse_obj_as(
95
+ type_=OrderResponse, # type: ignore
96
+ object_=_response.json(),
97
+ ),
98
+ )
99
+ return HttpResponse(response=_response, data=_data)
100
+ if _response.status_code == 400:
101
+ raise BadRequestError(
102
+ headers=dict(_response.headers),
103
+ body=typing.cast(
104
+ typing.Any,
105
+ parse_obj_as(
106
+ type_=typing.Any, # type: ignore
107
+ object_=_response.json(),
108
+ ),
109
+ ),
110
+ )
111
+ if _response.status_code == 401:
112
+ raise UnauthorizedError(
113
+ headers=dict(_response.headers),
114
+ body=typing.cast(
115
+ ErrorResponse,
116
+ parse_obj_as(
117
+ type_=ErrorResponse, # type: ignore
118
+ object_=_response.json(),
119
+ ),
120
+ ),
121
+ )
122
+ if _response.status_code == 404:
123
+ raise NotFoundError(
124
+ headers=dict(_response.headers),
125
+ body=typing.cast(
126
+ ErrorResponse,
127
+ parse_obj_as(
128
+ type_=ErrorResponse, # type: ignore
129
+ object_=_response.json(),
130
+ ),
131
+ ),
132
+ )
133
+ if _response.status_code == 422:
134
+ raise UnprocessableEntityError(
135
+ headers=dict(_response.headers),
136
+ body=typing.cast(
137
+ typing.Any,
138
+ parse_obj_as(
139
+ type_=typing.Any, # type: ignore
140
+ object_=_response.json(),
141
+ ),
142
+ ),
143
+ )
144
+ if _response.status_code == 500:
145
+ raise InternalServerError(
146
+ headers=dict(_response.headers),
147
+ body=typing.cast(
148
+ ErrorResponse,
149
+ parse_obj_as(
150
+ type_=ErrorResponse, # type: ignore
151
+ object_=_response.json(),
152
+ ),
153
+ ),
154
+ )
155
+ _response_json = _response.json()
156
+ except JSONDecodeError:
157
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
158
+ except ValidationError as e:
159
+ raise ParsingError(
160
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
161
+ )
162
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
163
+
164
+ def generate_otp(
165
+ self, *, payment_id: str, request_options: typing.Optional[RequestOptions] = None
166
+ ) -> HttpResponse[OtpGenerateResponse]:
167
+ """
168
+ Generate a One-Time Password (OTP) for card payment authentication.
169
+ This API is called after a card payment is created and the card requires
170
+ OTP-based verification (native OTP flow).
171
+
172
+ Parameters
173
+ ----------
174
+ payment_id : str
175
+ Unique identifier of the payment requiring OTP verification.
176
+
177
+ request_options : typing.Optional[RequestOptions]
178
+ Request-specific configuration.
179
+
180
+ Returns
181
+ -------
182
+ HttpResponse[OtpGenerateResponse]
183
+ OTP generated successfully.
184
+ """
185
+ _response = self._client_wrapper.httpx_client.request(
186
+ "api/pay/v1/otp/generate",
187
+ method="POST",
188
+ json={
189
+ "payment_id": payment_id,
190
+ },
191
+ headers={
192
+ "content-type": "application/json",
193
+ },
194
+ request_options=request_options,
195
+ omit=OMIT,
196
+ )
197
+ try:
198
+ if 200 <= _response.status_code < 300:
199
+ _data = typing.cast(
200
+ OtpGenerateResponse,
201
+ parse_obj_as(
202
+ type_=OtpGenerateResponse, # type: ignore
203
+ object_=_response.json(),
204
+ ),
205
+ )
206
+ return HttpResponse(response=_response, data=_data)
207
+ if _response.status_code == 400:
208
+ raise BadRequestError(
209
+ headers=dict(_response.headers),
210
+ body=typing.cast(
211
+ typing.Any,
212
+ parse_obj_as(
213
+ type_=typing.Any, # type: ignore
214
+ object_=_response.json(),
215
+ ),
216
+ ),
217
+ )
218
+ if _response.status_code == 422:
219
+ raise UnprocessableEntityError(
220
+ headers=dict(_response.headers),
221
+ body=typing.cast(
222
+ typing.Any,
223
+ parse_obj_as(
224
+ type_=typing.Any, # type: ignore
225
+ object_=_response.json(),
226
+ ),
227
+ ),
228
+ )
229
+ if _response.status_code == 500:
230
+ raise InternalServerError(
231
+ headers=dict(_response.headers),
232
+ body=typing.cast(
233
+ ErrorResponse,
234
+ parse_obj_as(
235
+ type_=ErrorResponse, # type: ignore
236
+ object_=_response.json(),
237
+ ),
238
+ ),
239
+ )
240
+ if _response.status_code == 503:
241
+ raise ServiceUnavailableError(
242
+ headers=dict(_response.headers),
243
+ body=typing.cast(
244
+ ErrorResponse,
245
+ parse_obj_as(
246
+ type_=ErrorResponse, # type: ignore
247
+ object_=_response.json(),
248
+ ),
249
+ ),
250
+ )
251
+ _response_json = _response.json()
252
+ except JSONDecodeError:
253
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
254
+ except ValidationError as e:
255
+ raise ParsingError(
256
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
257
+ )
258
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
259
+
260
+ def get_card_details(
261
+ self,
262
+ *,
263
+ card_details: typing.Sequence[CardDetailLookupItem],
264
+ amount: typing.Optional[str] = OMIT,
265
+ request_options: typing.Optional[RequestOptions] = None,
266
+ ) -> HttpResponse[GetCardDetailsResponse]:
267
+ """
268
+ Use this API to get the card details.
269
+
270
+ Parameters
271
+ ----------
272
+ card_details : typing.Sequence[CardDetailLookupItem]
273
+ An array that contains the card details.
274
+
275
+ amount : typing.Optional[str]
276
+ Transaction amount in smallest currency unit.
277
+
278
+ request_options : typing.Optional[RequestOptions]
279
+ Request-specific configuration.
280
+
281
+ Returns
282
+ -------
283
+ HttpResponse[GetCardDetailsResponse]
284
+ Card details retrieved successfully.
285
+ """
286
+ _response = self._client_wrapper.httpx_client.request(
287
+ "api/pay/v1/getCardDetails",
288
+ method="POST",
289
+ json={
290
+ "amount": amount,
291
+ "card_details": convert_and_respect_annotation_metadata(
292
+ object_=card_details, annotation=typing.Sequence[CardDetailLookupItem], direction="write"
293
+ ),
294
+ },
295
+ headers={
296
+ "content-type": "application/json",
297
+ },
298
+ request_options=request_options,
299
+ omit=OMIT,
300
+ )
301
+ try:
302
+ if 200 <= _response.status_code < 300:
303
+ _data = typing.cast(
304
+ GetCardDetailsResponse,
305
+ parse_obj_as(
306
+ type_=GetCardDetailsResponse, # type: ignore
307
+ object_=_response.json(),
308
+ ),
309
+ )
310
+ return HttpResponse(response=_response, data=_data)
311
+ if _response.status_code == 400:
312
+ raise BadRequestError(
313
+ headers=dict(_response.headers),
314
+ body=typing.cast(
315
+ typing.Any,
316
+ parse_obj_as(
317
+ type_=typing.Any, # type: ignore
318
+ object_=_response.json(),
319
+ ),
320
+ ),
321
+ )
322
+ if _response.status_code == 422:
323
+ raise UnprocessableEntityError(
324
+ headers=dict(_response.headers),
325
+ body=typing.cast(
326
+ typing.Any,
327
+ parse_obj_as(
328
+ type_=typing.Any, # type: ignore
329
+ object_=_response.json(),
330
+ ),
331
+ ),
332
+ )
333
+ if _response.status_code == 500:
334
+ raise InternalServerError(
335
+ headers=dict(_response.headers),
336
+ body=typing.cast(
337
+ ErrorResponse,
338
+ parse_obj_as(
339
+ type_=ErrorResponse, # type: ignore
340
+ object_=_response.json(),
341
+ ),
342
+ ),
343
+ )
344
+ if _response.status_code == 503:
345
+ raise ServiceUnavailableError(
346
+ headers=dict(_response.headers),
347
+ body=typing.cast(
348
+ ErrorResponse,
349
+ parse_obj_as(
350
+ type_=ErrorResponse, # type: ignore
351
+ object_=_response.json(),
352
+ ),
353
+ ),
354
+ )
355
+ _response_json = _response.json()
356
+ except JSONDecodeError:
357
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
358
+ except ValidationError as e:
359
+ raise ParsingError(
360
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
361
+ )
362
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
363
+
364
+ def submit_otp(
365
+ self, *, payment_id: str, otp: str, request_options: typing.Optional[RequestOptions] = None
366
+ ) -> HttpResponse[BnplSubmitOtpResponse]:
367
+ """
368
+ Submit the OTP received on the customer's registered mobile number
369
+ to validate and process the payment. This endpoint is shared between
370
+ Card Payments (native OTP flow) and BNPL payment verification.
371
+
372
+ Parameters
373
+ ----------
374
+ payment_id : str
375
+ Unique payment identifier from create payment response.
376
+
377
+ otp : str
378
+ OTP received by the customer.
379
+
380
+ request_options : typing.Optional[RequestOptions]
381
+ Request-specific configuration.
382
+
383
+ Returns
384
+ -------
385
+ HttpResponse[BnplSubmitOtpResponse]
386
+ OTP verified and payment processed successfully.
387
+ """
388
+ _response = self._client_wrapper.httpx_client.request(
389
+ "api/pay/v1/otp/submit",
390
+ method="POST",
391
+ json={
392
+ "payment_id": payment_id,
393
+ "otp": otp,
394
+ },
395
+ headers={
396
+ "content-type": "application/json",
397
+ },
398
+ request_options=request_options,
399
+ omit=OMIT,
400
+ )
401
+ try:
402
+ if 200 <= _response.status_code < 300:
403
+ _data = typing.cast(
404
+ BnplSubmitOtpResponse,
405
+ parse_obj_as(
406
+ type_=BnplSubmitOtpResponse, # type: ignore
407
+ object_=_response.json(),
408
+ ),
409
+ )
410
+ return HttpResponse(response=_response, data=_data)
411
+ if _response.status_code == 400:
412
+ raise BadRequestError(
413
+ headers=dict(_response.headers),
414
+ body=typing.cast(
415
+ typing.Any,
416
+ parse_obj_as(
417
+ type_=typing.Any, # type: ignore
418
+ object_=_response.json(),
419
+ ),
420
+ ),
421
+ )
422
+ if _response.status_code == 422:
423
+ raise UnprocessableEntityError(
424
+ headers=dict(_response.headers),
425
+ body=typing.cast(
426
+ typing.Any,
427
+ parse_obj_as(
428
+ type_=typing.Any, # type: ignore
429
+ object_=_response.json(),
430
+ ),
431
+ ),
432
+ )
433
+ if _response.status_code == 500:
434
+ raise InternalServerError(
435
+ headers=dict(_response.headers),
436
+ body=typing.cast(
437
+ ErrorResponse,
438
+ parse_obj_as(
439
+ type_=ErrorResponse, # type: ignore
440
+ object_=_response.json(),
441
+ ),
442
+ ),
443
+ )
444
+ if _response.status_code == 503:
445
+ raise ServiceUnavailableError(
446
+ headers=dict(_response.headers),
447
+ body=typing.cast(
448
+ ErrorResponse,
449
+ parse_obj_as(
450
+ type_=ErrorResponse, # type: ignore
451
+ object_=_response.json(),
452
+ ),
453
+ ),
454
+ )
455
+ _response_json = _response.json()
456
+ except JSONDecodeError:
457
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
458
+ except ValidationError as e:
459
+ raise ParsingError(
460
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
461
+ )
462
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
463
+
464
+ def resend_otp(
465
+ self, *, payment_id: str, request_options: typing.Optional[RequestOptions] = None
466
+ ) -> HttpResponse[BnplResendOtpResponse]:
467
+ """
468
+ Resend the OTP to the customer's registered mobile number
469
+ for payment verification. This endpoint is shared between
470
+ Card Payments (native OTP flow) and BNPL payment verification.
471
+
472
+ Parameters
473
+ ----------
474
+ payment_id : str
475
+ Unique payment identifier from create payment response.
476
+
477
+ request_options : typing.Optional[RequestOptions]
478
+ Request-specific configuration.
479
+
480
+ Returns
481
+ -------
482
+ HttpResponse[BnplResendOtpResponse]
483
+ OTP resent successfully.
484
+ """
485
+ _response = self._client_wrapper.httpx_client.request(
486
+ "api/pay/v1/otp/resend",
487
+ method="POST",
488
+ json={
489
+ "payment_id": payment_id,
490
+ },
491
+ headers={
492
+ "content-type": "application/json",
493
+ },
494
+ request_options=request_options,
495
+ omit=OMIT,
496
+ )
497
+ try:
498
+ if 200 <= _response.status_code < 300:
499
+ _data = typing.cast(
500
+ BnplResendOtpResponse,
501
+ parse_obj_as(
502
+ type_=BnplResendOtpResponse, # type: ignore
503
+ object_=_response.json(),
504
+ ),
505
+ )
506
+ return HttpResponse(response=_response, data=_data)
507
+ if _response.status_code == 400:
508
+ raise BadRequestError(
509
+ headers=dict(_response.headers),
510
+ body=typing.cast(
511
+ typing.Any,
512
+ parse_obj_as(
513
+ type_=typing.Any, # type: ignore
514
+ object_=_response.json(),
515
+ ),
516
+ ),
517
+ )
518
+ if _response.status_code == 422:
519
+ raise UnprocessableEntityError(
520
+ headers=dict(_response.headers),
521
+ body=typing.cast(
522
+ typing.Any,
523
+ parse_obj_as(
524
+ type_=typing.Any, # type: ignore
525
+ object_=_response.json(),
526
+ ),
527
+ ),
528
+ )
529
+ if _response.status_code == 500:
530
+ raise InternalServerError(
531
+ headers=dict(_response.headers),
532
+ body=typing.cast(
533
+ ErrorResponse,
534
+ parse_obj_as(
535
+ type_=ErrorResponse, # type: ignore
536
+ object_=_response.json(),
537
+ ),
538
+ ),
539
+ )
540
+ if _response.status_code == 503:
541
+ raise ServiceUnavailableError(
542
+ headers=dict(_response.headers),
543
+ body=typing.cast(
544
+ ErrorResponse,
545
+ parse_obj_as(
546
+ type_=ErrorResponse, # type: ignore
547
+ object_=_response.json(),
548
+ ),
549
+ ),
550
+ )
551
+ _response_json = _response.json()
552
+ except JSONDecodeError:
553
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
554
+ except ValidationError as e:
555
+ raise ParsingError(
556
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
557
+ )
558
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
559
+
560
+
561
+ class AsyncRawCardPaymentsClient:
562
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
563
+ self._client_wrapper = client_wrapper
564
+
565
+ async def create_payment(
566
+ self,
567
+ order_id: str,
568
+ *,
569
+ payments: typing.Sequence[PaymentRequestItem],
570
+ request_options: typing.Optional[RequestOptions] = None,
571
+ ) -> AsyncHttpResponse[OrderResponse]:
572
+ """
573
+ Create a payment against an existing order. This unified endpoint supports
574
+ multiple payment methods differentiated by the `payment_method` field:
575
+
576
+ - **CARD** — Pay with card number or card token (see Card Payments documentation)
577
+ - **UPI** — Pay via UPI Collect or UPI Intent/QR (see UPI Payments documentation)
578
+ - **NETBANKING** — Pay via net banking redirect (see Net Banking documentation)
579
+ - **WALLET** — Pay via digital wallet (see Wallet documentation)
580
+ - **EMI** — Pay via Credit/Debit EMI or Cardless EMI (see Affordability Suite documentation)
581
+ - **BNPL** — Pay via Buy Now Pay Later (see BNPL documentation)
582
+
583
+ The response returns the full order object with the payment linked.
584
+ For redirect-based flows (NetBanking, Wallet, UPI Intent), use the
585
+ `challenge_url` in the response to redirect the customer.
586
+
587
+ Parameters
588
+ ----------
589
+ order_id : str
590
+ Unique identifier of the order in the Pine Labs Online database.
591
+
592
+ payments : typing.Sequence[PaymentRequestItem]
593
+ Array of payment items. Typically contains a single item.
594
+
595
+ request_options : typing.Optional[RequestOptions]
596
+ Request-specific configuration.
597
+
598
+ Returns
599
+ -------
600
+ AsyncHttpResponse[OrderResponse]
601
+ Payment created successfully. Returns the full order with payment details.
602
+ """
603
+ _response = await self._client_wrapper.httpx_client.request(
604
+ f"api/pay/v1/orders/{encode_path_param(order_id)}/payments",
605
+ method="POST",
606
+ json={
607
+ "payments": convert_and_respect_annotation_metadata(
608
+ object_=payments, annotation=typing.Sequence[PaymentRequestItem], direction="write"
609
+ ),
610
+ },
611
+ headers={
612
+ "content-type": "application/json",
613
+ },
614
+ request_options=request_options,
615
+ omit=OMIT,
616
+ )
617
+ try:
618
+ if 200 <= _response.status_code < 300:
619
+ _data = typing.cast(
620
+ OrderResponse,
621
+ parse_obj_as(
622
+ type_=OrderResponse, # type: ignore
623
+ object_=_response.json(),
624
+ ),
625
+ )
626
+ return AsyncHttpResponse(response=_response, data=_data)
627
+ if _response.status_code == 400:
628
+ raise BadRequestError(
629
+ headers=dict(_response.headers),
630
+ body=typing.cast(
631
+ typing.Any,
632
+ parse_obj_as(
633
+ type_=typing.Any, # type: ignore
634
+ object_=_response.json(),
635
+ ),
636
+ ),
637
+ )
638
+ if _response.status_code == 401:
639
+ raise UnauthorizedError(
640
+ headers=dict(_response.headers),
641
+ body=typing.cast(
642
+ ErrorResponse,
643
+ parse_obj_as(
644
+ type_=ErrorResponse, # type: ignore
645
+ object_=_response.json(),
646
+ ),
647
+ ),
648
+ )
649
+ if _response.status_code == 404:
650
+ raise NotFoundError(
651
+ headers=dict(_response.headers),
652
+ body=typing.cast(
653
+ ErrorResponse,
654
+ parse_obj_as(
655
+ type_=ErrorResponse, # type: ignore
656
+ object_=_response.json(),
657
+ ),
658
+ ),
659
+ )
660
+ if _response.status_code == 422:
661
+ raise UnprocessableEntityError(
662
+ headers=dict(_response.headers),
663
+ body=typing.cast(
664
+ typing.Any,
665
+ parse_obj_as(
666
+ type_=typing.Any, # type: ignore
667
+ object_=_response.json(),
668
+ ),
669
+ ),
670
+ )
671
+ if _response.status_code == 500:
672
+ raise InternalServerError(
673
+ headers=dict(_response.headers),
674
+ body=typing.cast(
675
+ ErrorResponse,
676
+ parse_obj_as(
677
+ type_=ErrorResponse, # type: ignore
678
+ object_=_response.json(),
679
+ ),
680
+ ),
681
+ )
682
+ _response_json = _response.json()
683
+ except JSONDecodeError:
684
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
685
+ except ValidationError as e:
686
+ raise ParsingError(
687
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
688
+ )
689
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
690
+
691
+ async def generate_otp(
692
+ self, *, payment_id: str, request_options: typing.Optional[RequestOptions] = None
693
+ ) -> AsyncHttpResponse[OtpGenerateResponse]:
694
+ """
695
+ Generate a One-Time Password (OTP) for card payment authentication.
696
+ This API is called after a card payment is created and the card requires
697
+ OTP-based verification (native OTP flow).
698
+
699
+ Parameters
700
+ ----------
701
+ payment_id : str
702
+ Unique identifier of the payment requiring OTP verification.
703
+
704
+ request_options : typing.Optional[RequestOptions]
705
+ Request-specific configuration.
706
+
707
+ Returns
708
+ -------
709
+ AsyncHttpResponse[OtpGenerateResponse]
710
+ OTP generated successfully.
711
+ """
712
+ _response = await self._client_wrapper.httpx_client.request(
713
+ "api/pay/v1/otp/generate",
714
+ method="POST",
715
+ json={
716
+ "payment_id": payment_id,
717
+ },
718
+ headers={
719
+ "content-type": "application/json",
720
+ },
721
+ request_options=request_options,
722
+ omit=OMIT,
723
+ )
724
+ try:
725
+ if 200 <= _response.status_code < 300:
726
+ _data = typing.cast(
727
+ OtpGenerateResponse,
728
+ parse_obj_as(
729
+ type_=OtpGenerateResponse, # type: ignore
730
+ object_=_response.json(),
731
+ ),
732
+ )
733
+ return AsyncHttpResponse(response=_response, data=_data)
734
+ if _response.status_code == 400:
735
+ raise BadRequestError(
736
+ headers=dict(_response.headers),
737
+ body=typing.cast(
738
+ typing.Any,
739
+ parse_obj_as(
740
+ type_=typing.Any, # type: ignore
741
+ object_=_response.json(),
742
+ ),
743
+ ),
744
+ )
745
+ if _response.status_code == 422:
746
+ raise UnprocessableEntityError(
747
+ headers=dict(_response.headers),
748
+ body=typing.cast(
749
+ typing.Any,
750
+ parse_obj_as(
751
+ type_=typing.Any, # type: ignore
752
+ object_=_response.json(),
753
+ ),
754
+ ),
755
+ )
756
+ if _response.status_code == 500:
757
+ raise InternalServerError(
758
+ headers=dict(_response.headers),
759
+ body=typing.cast(
760
+ ErrorResponse,
761
+ parse_obj_as(
762
+ type_=ErrorResponse, # type: ignore
763
+ object_=_response.json(),
764
+ ),
765
+ ),
766
+ )
767
+ if _response.status_code == 503:
768
+ raise ServiceUnavailableError(
769
+ headers=dict(_response.headers),
770
+ body=typing.cast(
771
+ ErrorResponse,
772
+ parse_obj_as(
773
+ type_=ErrorResponse, # type: ignore
774
+ object_=_response.json(),
775
+ ),
776
+ ),
777
+ )
778
+ _response_json = _response.json()
779
+ except JSONDecodeError:
780
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
781
+ except ValidationError as e:
782
+ raise ParsingError(
783
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
784
+ )
785
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
786
+
787
+ async def get_card_details(
788
+ self,
789
+ *,
790
+ card_details: typing.Sequence[CardDetailLookupItem],
791
+ amount: typing.Optional[str] = OMIT,
792
+ request_options: typing.Optional[RequestOptions] = None,
793
+ ) -> AsyncHttpResponse[GetCardDetailsResponse]:
794
+ """
795
+ Use this API to get the card details.
796
+
797
+ Parameters
798
+ ----------
799
+ card_details : typing.Sequence[CardDetailLookupItem]
800
+ An array that contains the card details.
801
+
802
+ amount : typing.Optional[str]
803
+ Transaction amount in smallest currency unit.
804
+
805
+ request_options : typing.Optional[RequestOptions]
806
+ Request-specific configuration.
807
+
808
+ Returns
809
+ -------
810
+ AsyncHttpResponse[GetCardDetailsResponse]
811
+ Card details retrieved successfully.
812
+ """
813
+ _response = await self._client_wrapper.httpx_client.request(
814
+ "api/pay/v1/getCardDetails",
815
+ method="POST",
816
+ json={
817
+ "amount": amount,
818
+ "card_details": convert_and_respect_annotation_metadata(
819
+ object_=card_details, annotation=typing.Sequence[CardDetailLookupItem], direction="write"
820
+ ),
821
+ },
822
+ headers={
823
+ "content-type": "application/json",
824
+ },
825
+ request_options=request_options,
826
+ omit=OMIT,
827
+ )
828
+ try:
829
+ if 200 <= _response.status_code < 300:
830
+ _data = typing.cast(
831
+ GetCardDetailsResponse,
832
+ parse_obj_as(
833
+ type_=GetCardDetailsResponse, # type: ignore
834
+ object_=_response.json(),
835
+ ),
836
+ )
837
+ return AsyncHttpResponse(response=_response, data=_data)
838
+ if _response.status_code == 400:
839
+ raise BadRequestError(
840
+ headers=dict(_response.headers),
841
+ body=typing.cast(
842
+ typing.Any,
843
+ parse_obj_as(
844
+ type_=typing.Any, # type: ignore
845
+ object_=_response.json(),
846
+ ),
847
+ ),
848
+ )
849
+ if _response.status_code == 422:
850
+ raise UnprocessableEntityError(
851
+ headers=dict(_response.headers),
852
+ body=typing.cast(
853
+ typing.Any,
854
+ parse_obj_as(
855
+ type_=typing.Any, # type: ignore
856
+ object_=_response.json(),
857
+ ),
858
+ ),
859
+ )
860
+ if _response.status_code == 500:
861
+ raise InternalServerError(
862
+ headers=dict(_response.headers),
863
+ body=typing.cast(
864
+ ErrorResponse,
865
+ parse_obj_as(
866
+ type_=ErrorResponse, # type: ignore
867
+ object_=_response.json(),
868
+ ),
869
+ ),
870
+ )
871
+ if _response.status_code == 503:
872
+ raise ServiceUnavailableError(
873
+ headers=dict(_response.headers),
874
+ body=typing.cast(
875
+ ErrorResponse,
876
+ parse_obj_as(
877
+ type_=ErrorResponse, # type: ignore
878
+ object_=_response.json(),
879
+ ),
880
+ ),
881
+ )
882
+ _response_json = _response.json()
883
+ except JSONDecodeError:
884
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
885
+ except ValidationError as e:
886
+ raise ParsingError(
887
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
888
+ )
889
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
890
+
891
+ async def submit_otp(
892
+ self, *, payment_id: str, otp: str, request_options: typing.Optional[RequestOptions] = None
893
+ ) -> AsyncHttpResponse[BnplSubmitOtpResponse]:
894
+ """
895
+ Submit the OTP received on the customer's registered mobile number
896
+ to validate and process the payment. This endpoint is shared between
897
+ Card Payments (native OTP flow) and BNPL payment verification.
898
+
899
+ Parameters
900
+ ----------
901
+ payment_id : str
902
+ Unique payment identifier from create payment response.
903
+
904
+ otp : str
905
+ OTP received by the customer.
906
+
907
+ request_options : typing.Optional[RequestOptions]
908
+ Request-specific configuration.
909
+
910
+ Returns
911
+ -------
912
+ AsyncHttpResponse[BnplSubmitOtpResponse]
913
+ OTP verified and payment processed successfully.
914
+ """
915
+ _response = await self._client_wrapper.httpx_client.request(
916
+ "api/pay/v1/otp/submit",
917
+ method="POST",
918
+ json={
919
+ "payment_id": payment_id,
920
+ "otp": otp,
921
+ },
922
+ headers={
923
+ "content-type": "application/json",
924
+ },
925
+ request_options=request_options,
926
+ omit=OMIT,
927
+ )
928
+ try:
929
+ if 200 <= _response.status_code < 300:
930
+ _data = typing.cast(
931
+ BnplSubmitOtpResponse,
932
+ parse_obj_as(
933
+ type_=BnplSubmitOtpResponse, # type: ignore
934
+ object_=_response.json(),
935
+ ),
936
+ )
937
+ return AsyncHttpResponse(response=_response, data=_data)
938
+ if _response.status_code == 400:
939
+ raise BadRequestError(
940
+ headers=dict(_response.headers),
941
+ body=typing.cast(
942
+ typing.Any,
943
+ parse_obj_as(
944
+ type_=typing.Any, # type: ignore
945
+ object_=_response.json(),
946
+ ),
947
+ ),
948
+ )
949
+ if _response.status_code == 422:
950
+ raise UnprocessableEntityError(
951
+ headers=dict(_response.headers),
952
+ body=typing.cast(
953
+ typing.Any,
954
+ parse_obj_as(
955
+ type_=typing.Any, # type: ignore
956
+ object_=_response.json(),
957
+ ),
958
+ ),
959
+ )
960
+ if _response.status_code == 500:
961
+ raise InternalServerError(
962
+ headers=dict(_response.headers),
963
+ body=typing.cast(
964
+ ErrorResponse,
965
+ parse_obj_as(
966
+ type_=ErrorResponse, # type: ignore
967
+ object_=_response.json(),
968
+ ),
969
+ ),
970
+ )
971
+ if _response.status_code == 503:
972
+ raise ServiceUnavailableError(
973
+ headers=dict(_response.headers),
974
+ body=typing.cast(
975
+ ErrorResponse,
976
+ parse_obj_as(
977
+ type_=ErrorResponse, # type: ignore
978
+ object_=_response.json(),
979
+ ),
980
+ ),
981
+ )
982
+ _response_json = _response.json()
983
+ except JSONDecodeError:
984
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
985
+ except ValidationError as e:
986
+ raise ParsingError(
987
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
988
+ )
989
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
990
+
991
+ async def resend_otp(
992
+ self, *, payment_id: str, request_options: typing.Optional[RequestOptions] = None
993
+ ) -> AsyncHttpResponse[BnplResendOtpResponse]:
994
+ """
995
+ Resend the OTP to the customer's registered mobile number
996
+ for payment verification. This endpoint is shared between
997
+ Card Payments (native OTP flow) and BNPL payment verification.
998
+
999
+ Parameters
1000
+ ----------
1001
+ payment_id : str
1002
+ Unique payment identifier from create payment response.
1003
+
1004
+ request_options : typing.Optional[RequestOptions]
1005
+ Request-specific configuration.
1006
+
1007
+ Returns
1008
+ -------
1009
+ AsyncHttpResponse[BnplResendOtpResponse]
1010
+ OTP resent successfully.
1011
+ """
1012
+ _response = await self._client_wrapper.httpx_client.request(
1013
+ "api/pay/v1/otp/resend",
1014
+ method="POST",
1015
+ json={
1016
+ "payment_id": payment_id,
1017
+ },
1018
+ headers={
1019
+ "content-type": "application/json",
1020
+ },
1021
+ request_options=request_options,
1022
+ omit=OMIT,
1023
+ )
1024
+ try:
1025
+ if 200 <= _response.status_code < 300:
1026
+ _data = typing.cast(
1027
+ BnplResendOtpResponse,
1028
+ parse_obj_as(
1029
+ type_=BnplResendOtpResponse, # type: ignore
1030
+ object_=_response.json(),
1031
+ ),
1032
+ )
1033
+ return AsyncHttpResponse(response=_response, data=_data)
1034
+ if _response.status_code == 400:
1035
+ raise BadRequestError(
1036
+ headers=dict(_response.headers),
1037
+ body=typing.cast(
1038
+ typing.Any,
1039
+ parse_obj_as(
1040
+ type_=typing.Any, # type: ignore
1041
+ object_=_response.json(),
1042
+ ),
1043
+ ),
1044
+ )
1045
+ if _response.status_code == 422:
1046
+ raise UnprocessableEntityError(
1047
+ headers=dict(_response.headers),
1048
+ body=typing.cast(
1049
+ typing.Any,
1050
+ parse_obj_as(
1051
+ type_=typing.Any, # type: ignore
1052
+ object_=_response.json(),
1053
+ ),
1054
+ ),
1055
+ )
1056
+ if _response.status_code == 500:
1057
+ raise InternalServerError(
1058
+ headers=dict(_response.headers),
1059
+ body=typing.cast(
1060
+ ErrorResponse,
1061
+ parse_obj_as(
1062
+ type_=ErrorResponse, # type: ignore
1063
+ object_=_response.json(),
1064
+ ),
1065
+ ),
1066
+ )
1067
+ if _response.status_code == 503:
1068
+ raise ServiceUnavailableError(
1069
+ headers=dict(_response.headers),
1070
+ body=typing.cast(
1071
+ ErrorResponse,
1072
+ parse_obj_as(
1073
+ type_=ErrorResponse, # type: ignore
1074
+ object_=_response.json(),
1075
+ ),
1076
+ ),
1077
+ )
1078
+ _response_json = _response.json()
1079
+ except JSONDecodeError:
1080
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1081
+ except ValidationError as e:
1082
+ raise ParsingError(
1083
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
1084
+ )
1085
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)