kard-financial-sdk 0.0.82__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 (302) hide show
  1. kard/__init__.py +579 -0
  2. kard/auth/__init__.py +34 -0
  3. kard/auth/client.py +121 -0
  4. kard/auth/raw_client.py +108 -0
  5. kard/auth/types/__init__.py +34 -0
  6. kard/auth/types/token_response.py +25 -0
  7. kard/client.py +416 -0
  8. kard/commons/__init__.py +120 -0
  9. kard/commons/errors/__init__.py +44 -0
  10. kard/commons/errors/conflict_error.py +11 -0
  11. kard/commons/errors/does_not_exist_error.py +11 -0
  12. kard/commons/errors/internal_server_error.py +11 -0
  13. kard/commons/errors/invalid_request.py +11 -0
  14. kard/commons/errors/unauthorized_error.py +11 -0
  15. kard/commons/types/__init__.py +107 -0
  16. kard/commons/types/category_option.py +26 -0
  17. kard/commons/types/commission_type.py +5 -0
  18. kard/commons/types/commission_value.py +28 -0
  19. kard/commons/types/commission_value_type.py +5 -0
  20. kard/commons/types/empty_object.py +17 -0
  21. kard/commons/types/enrolled_rewards_type.py +5 -0
  22. kard/commons/types/error_object.py +43 -0
  23. kard/commons/types/error_response.py +20 -0
  24. kard/commons/types/error_source.py +32 -0
  25. kard/commons/types/job.py +24 -0
  26. kard/commons/types/job_response.py +27 -0
  27. kard/commons/types/job_status.py +5 -0
  28. kard/commons/types/links.py +27 -0
  29. kard/commons/types/mongo_id.py +3 -0
  30. kard/commons/types/notification_type.py +19 -0
  31. kard/commons/types/organization_id.py +3 -0
  32. kard/commons/types/purchase_channel.py +5 -0
  33. kard/commons/types/relationship_data.py +24 -0
  34. kard/commons/types/relationship_multiple.py +20 -0
  35. kard/commons/types/relationship_single.py +20 -0
  36. kard/commons/types/resource_type.py +3 -0
  37. kard/commons/types/state.py +68 -0
  38. kard/commons/types/subscription_id.py +3 -0
  39. kard/commons/types/user_id.py +3 -0
  40. kard/core/__init__.py +105 -0
  41. kard/core/api_error.py +23 -0
  42. kard/core/client_wrapper.py +97 -0
  43. kard/core/datetime_utils.py +28 -0
  44. kard/core/file.py +67 -0
  45. kard/core/force_multipart.py +18 -0
  46. kard/core/http_client.py +613 -0
  47. kard/core/http_response.py +55 -0
  48. kard/core/http_sse/__init__.py +42 -0
  49. kard/core/http_sse/_api.py +112 -0
  50. kard/core/http_sse/_decoders.py +61 -0
  51. kard/core/http_sse/_exceptions.py +7 -0
  52. kard/core/http_sse/_models.py +17 -0
  53. kard/core/jsonable_encoder.py +100 -0
  54. kard/core/oauth_token_provider.py +73 -0
  55. kard/core/pydantic_utilities.py +260 -0
  56. kard/core/query_encoder.py +58 -0
  57. kard/core/remove_none_from_dict.py +11 -0
  58. kard/core/request_options.py +35 -0
  59. kard/core/serialization.py +276 -0
  60. kard/environment.py +8 -0
  61. kard/files/__init__.py +58 -0
  62. kard/files/client.py +213 -0
  63. kard/files/errors/__init__.py +34 -0
  64. kard/files/errors/forbidden_error.py +11 -0
  65. kard/files/raw_client.py +278 -0
  66. kard/files/types/__init__.py +53 -0
  67. kard/files/types/file_metadata_attribute.py +39 -0
  68. kard/files/types/file_metadata_with_url.py +34 -0
  69. kard/files/types/file_type.py +13 -0
  70. kard/files/types/files_metadata_sort_options.py +5 -0
  71. kard/files/types/get_files_metadata_response.py +71 -0
  72. kard/files/types/pagination_meta.py +29 -0
  73. kard/notifications/__init__.py +279 -0
  74. kard/notifications/client.py +63 -0
  75. kard/notifications/raw_client.py +13 -0
  76. kard/notifications/subscriptions/__init__.py +97 -0
  77. kard/notifications/subscriptions/client.py +372 -0
  78. kard/notifications/subscriptions/raw_client.py +581 -0
  79. kard/notifications/subscriptions/types/__init__.py +94 -0
  80. kard/notifications/subscriptions/types/create_subscription_union.py +27 -0
  81. kard/notifications/subscriptions/types/create_subscriptions_response_object.py +43 -0
  82. kard/notifications/subscriptions/types/created_subscription.py +23 -0
  83. kard/notifications/subscriptions/types/subscription.py +25 -0
  84. kard/notifications/subscriptions/types/subscription_attributes.py +35 -0
  85. kard/notifications/subscriptions/types/subscription_request.py +20 -0
  86. kard/notifications/subscriptions/types/subscription_request_attributes.py +35 -0
  87. kard/notifications/subscriptions/types/subscription_request_body.py +42 -0
  88. kard/notifications/subscriptions/types/subscription_request_union.py +26 -0
  89. kard/notifications/subscriptions/types/subscription_union.py +27 -0
  90. kard/notifications/subscriptions/types/subscriptions_response_object.py +43 -0
  91. kard/notifications/subscriptions/types/update_subscription_request.py +20 -0
  92. kard/notifications/subscriptions/types/update_subscription_request_attributes.py +39 -0
  93. kard/notifications/subscriptions/types/update_subscription_request_body.py +40 -0
  94. kard/notifications/subscriptions/types/update_subscription_request_union.py +26 -0
  95. kard/notifications/subscriptions/types/update_subscriptions_response_object.py +41 -0
  96. kard/notifications/types/__init__.py +214 -0
  97. kard/notifications/types/audit_update_attributes.py +88 -0
  98. kard/notifications/types/audit_update_data.py +27 -0
  99. kard/notifications/types/audit_update_relationships.py +21 -0
  100. kard/notifications/types/broker_amount.py +28 -0
  101. kard/notifications/types/broker_amount_type.py +5 -0
  102. kard/notifications/types/broker_asset.py +33 -0
  103. kard/notifications/types/broker_asset_type.py +5 -0
  104. kard/notifications/types/broker_operation_hours.py +30 -0
  105. kard/notifications/types/broker_operation_period.py +28 -0
  106. kard/notifications/types/broker_purchase_channel.py +5 -0
  107. kard/notifications/types/broker_reward.py +28 -0
  108. kard/notifications/types/broker_reward_type.py +5 -0
  109. kard/notifications/types/clawback_data.py +27 -0
  110. kard/notifications/types/earned_reward_approved_data.py +27 -0
  111. kard/notifications/types/earned_reward_attributes.py +18 -0
  112. kard/notifications/types/earned_reward_relationships.py +21 -0
  113. kard/notifications/types/earned_reward_settled_attributes.py +23 -0
  114. kard/notifications/types/earned_reward_settled_data.py +27 -0
  115. kard/notifications/types/failed_transaction_attributes.py +41 -0
  116. kard/notifications/types/failed_transaction_data.py +27 -0
  117. kard/notifications/types/failed_transaction_relationships.py +22 -0
  118. kard/notifications/types/location_address.py +39 -0
  119. kard/notifications/types/location_coordinates.py +27 -0
  120. kard/notifications/types/location_status.py +5 -0
  121. kard/notifications/types/merchant_source.py +5 -0
  122. kard/notifications/types/notification_data_union.py +203 -0
  123. kard/notifications/types/notification_metadata.py +22 -0
  124. kard/notifications/types/notification_payload.py +65 -0
  125. kard/notifications/types/offer_status.py +5 -0
  126. kard/notifications/types/offer_type.py +5 -0
  127. kard/notifications/types/reward_notification_attributes.py +48 -0
  128. kard/notifications/types/time_period.py +27 -0
  129. kard/notifications/types/transaction_relationships.py +22 -0
  130. kard/notifications/types/user_offer_status.py +5 -0
  131. kard/notifications/types/valid_transaction_attributes.py +25 -0
  132. kard/notifications/types/valid_transaction_commission_earned.py +21 -0
  133. kard/notifications/types/valid_transaction_data.py +27 -0
  134. kard/notifications/types/webhook_locations_attributes.py +71 -0
  135. kard/notifications/types/webhook_locations_data.py +27 -0
  136. kard/notifications/types/webhook_locations_relationships.py +20 -0
  137. kard/notifications/types/webhook_merchant_attributes.py +67 -0
  138. kard/notifications/types/webhook_merchant_data.py +27 -0
  139. kard/notifications/types/webhook_merchant_relationships.py +20 -0
  140. kard/notifications/types/webhook_offer_attributes.py +143 -0
  141. kard/notifications/types/webhook_offer_data.py +27 -0
  142. kard/notifications/types/webhook_offer_relationships.py +20 -0
  143. kard/notifications/types/webhook_user_offer_attributes.py +41 -0
  144. kard/notifications/types/webhook_user_offer_data.py +27 -0
  145. kard/notifications/types/webhook_user_offer_relationships.py +21 -0
  146. kard/ping/__init__.py +39 -0
  147. kard/ping/client.py +100 -0
  148. kard/ping/errors/__init__.py +34 -0
  149. kard/ping/errors/network_blocked_error.py +11 -0
  150. kard/ping/raw_client.py +113 -0
  151. kard/ping/types/__init__.py +38 -0
  152. kard/ping/types/network_blocked_error_body.py +34 -0
  153. kard/ping/types/ping_response_object.py +46 -0
  154. kard/py.typed +0 -0
  155. kard/transactions/__init__.py +212 -0
  156. kard/transactions/client.py +639 -0
  157. kard/transactions/errors/__init__.py +40 -0
  158. kard/transactions/errors/create_audit_multi_status.py +11 -0
  159. kard/transactions/errors/create_incoming_transactions_multi_status.py +11 -0
  160. kard/transactions/errors/fraud_multi_status.py +11 -0
  161. kard/transactions/raw_client.py +925 -0
  162. kard/transactions/types/__init__.py +199 -0
  163. kard/transactions/types/audit_attributes.py +44 -0
  164. kard/transactions/types/audit_request_data.py +20 -0
  165. kard/transactions/types/audit_response_attributes.py +24 -0
  166. kard/transactions/types/audit_response_data.py +25 -0
  167. kard/transactions/types/audit_status.py +5 -0
  168. kard/transactions/types/card_network.py +5 -0
  169. kard/transactions/types/commission_earned_details.py +21 -0
  170. kard/transactions/types/create_audit_multi_status_response.py +21 -0
  171. kard/transactions/types/create_audit_request_body.py +43 -0
  172. kard/transactions/types/create_audit_request_data_union.py +26 -0
  173. kard/transactions/types/create_audit_response_body.py +41 -0
  174. kard/transactions/types/create_audit_response_data_union.py +27 -0
  175. kard/transactions/types/direction_type.py +5 -0
  176. kard/transactions/types/fraudulent_transaction_attributes.py +24 -0
  177. kard/transactions/types/fraudulent_transaction_data.py +30 -0
  178. kard/transactions/types/fraudulent_transaction_object.py +42 -0
  179. kard/transactions/types/fraudulent_transaction_request_body.py +45 -0
  180. kard/transactions/types/fraudulent_transaction_response.py +21 -0
  181. kard/transactions/types/get_earned_rewards_response.py +133 -0
  182. kard/transactions/types/matched_transactions_attributes.py +156 -0
  183. kard/transactions/types/matched_transactions_request.py +25 -0
  184. kard/transactions/types/merchant.py +82 -0
  185. kard/transactions/types/payment_status.py +5 -0
  186. kard/transactions/types/payment_type.py +5 -0
  187. kard/transactions/types/processor_mid.py +26 -0
  188. kard/transactions/types/receipt_medium_type.py +5 -0
  189. kard/transactions/types/rewarded_transaction.py +27 -0
  190. kard/transactions/types/rewarded_transaction_attributes.py +74 -0
  191. kard/transactions/types/rewarded_transaction_relationships.py +22 -0
  192. kard/transactions/types/rewarded_transaction_status.py +5 -0
  193. kard/transactions/types/rewarded_transaction_union.py +29 -0
  194. kard/transactions/types/states.py +68 -0
  195. kard/transactions/types/transaction_included_resource.py +47 -0
  196. kard/transactions/types/transaction_merchant_attributes.py +22 -0
  197. kard/transactions/types/transaction_merchant_resource.py +28 -0
  198. kard/transactions/types/transaction_offer_attributes.py +26 -0
  199. kard/transactions/types/transaction_offer_resource.py +28 -0
  200. kard/transactions/types/transaction_payment_type.py +5 -0
  201. kard/transactions/types/transaction_status.py +5 -0
  202. kard/transactions/types/transactions.py +46 -0
  203. kard/transactions/types/transactions_attributes.py +198 -0
  204. kard/transactions/types/transactions_multi_response.py +21 -0
  205. kard/transactions/types/transactions_request.py +25 -0
  206. kard/transactions/types/transactions_request_body.py +90 -0
  207. kard/transactions/types/transactions_response.py +38 -0
  208. kard/transactions/types/transactions_response_data.py +27 -0
  209. kard/transactions/types/visa_mid.py +23 -0
  210. kard/transactions/types/visa_mid_details.py +27 -0
  211. kard/users/__init__.py +293 -0
  212. kard/users/attributions/__init__.py +73 -0
  213. kard/users/attributions/client.py +229 -0
  214. kard/users/attributions/raw_client.py +215 -0
  215. kard/users/attributions/types/__init__.py +73 -0
  216. kard/users/attributions/types/create_attribution_request_object.py +75 -0
  217. kard/users/attributions/types/create_attribution_request_union.py +45 -0
  218. kard/users/attributions/types/create_attribution_response.py +38 -0
  219. kard/users/attributions/types/event_code.py +5 -0
  220. kard/users/attributions/types/notification_attribution_attributes.py +35 -0
  221. kard/users/attributions/types/notification_attribution_request.py +20 -0
  222. kard/users/attributions/types/notification_medium.py +5 -0
  223. kard/users/attributions/types/offer_attribution_attributes.py +35 -0
  224. kard/users/attributions/types/offer_attribution_request.py +20 -0
  225. kard/users/attributions/types/offer_medium.py +5 -0
  226. kard/users/client.py +512 -0
  227. kard/users/errors/__init__.py +34 -0
  228. kard/users/errors/multi_status.py +11 -0
  229. kard/users/raw_client.py +783 -0
  230. kard/users/rewards/__init__.py +133 -0
  231. kard/users/rewards/client.py +448 -0
  232. kard/users/rewards/raw_client.py +587 -0
  233. kard/users/rewards/types/__init__.py +130 -0
  234. kard/users/rewards/types/amount.py +21 -0
  235. kard/users/rewards/types/amount_type.py +5 -0
  236. kard/users/rewards/types/asset.py +28 -0
  237. kard/users/rewards/types/category_data.py +18 -0
  238. kard/users/rewards/types/category_fields.py +23 -0
  239. kard/users/rewards/types/category_identifier.py +24 -0
  240. kard/users/rewards/types/category_included.py +21 -0
  241. kard/users/rewards/types/category_relationship.py +20 -0
  242. kard/users/rewards/types/category_relationship_object.py +20 -0
  243. kard/users/rewards/types/commission.py +21 -0
  244. kard/users/rewards/types/coordinates.py +20 -0
  245. kard/users/rewards/types/eligibility_location_address.py +24 -0
  246. kard/users/rewards/types/eligibility_location_included.py +8 -0
  247. kard/users/rewards/types/eligibility_offer_included.py +7 -0
  248. kard/users/rewards/types/eligibility_offer_relationship.py +7 -0
  249. kard/users/rewards/types/location_attributes.py +28 -0
  250. kard/users/rewards/types/location_data.py +32 -0
  251. kard/users/rewards/types/location_relationships.py +18 -0
  252. kard/users/rewards/types/location_sort_options.py +5 -0
  253. kard/users/rewards/types/locations_response_object.py +215 -0
  254. kard/users/rewards/types/offer_common_fields.py +103 -0
  255. kard/users/rewards/types/offer_data_union.py +30 -0
  256. kard/users/rewards/types/offer_relationship.py +21 -0
  257. kard/users/rewards/types/offer_sort_options.py +7 -0
  258. kard/users/rewards/types/offers_response_object.py +130 -0
  259. kard/users/rewards/types/operation_hours.py +23 -0
  260. kard/users/rewards/types/operation_period.py +21 -0
  261. kard/users/rewards/types/operation_time.py +20 -0
  262. kard/users/rewards/types/standard_offer.py +21 -0
  263. kard/users/rewards/types/standard_offer_core.py +26 -0
  264. kard/users/rewards/types/standard_offer_fields.py +18 -0
  265. kard/users/types/__init__.py +66 -0
  266. kard/users/types/create_users_multi_status_response.py +21 -0
  267. kard/users/types/create_users_object.py +42 -0
  268. kard/users/types/delete_user_response_object.py +34 -0
  269. kard/users/types/update_user_object.py +40 -0
  270. kard/users/types/user_request_attributes.py +60 -0
  271. kard/users/types/user_request_data.py +22 -0
  272. kard/users/types/user_request_data_union.py +28 -0
  273. kard/users/types/user_response_no_data.py +22 -0
  274. kard/users/types/user_response_union_no_data.py +28 -0
  275. kard/users/uploads/__init__.py +112 -0
  276. kard/users/uploads/client.py +484 -0
  277. kard/users/uploads/errors/__init__.py +34 -0
  278. kard/users/uploads/errors/upload_part_multi_status.py +13 -0
  279. kard/users/uploads/raw_client.py +625 -0
  280. kard/users/uploads/types/__init__.py +119 -0
  281. kard/users/uploads/types/create_upload_part_data_union.py +27 -0
  282. kard/users/uploads/types/create_upload_part_multi_status_response.py +21 -0
  283. kard/users/uploads/types/create_upload_part_request_object.py +74 -0
  284. kard/users/uploads/types/create_upload_part_response_data.py +25 -0
  285. kard/users/uploads/types/create_upload_part_response_data_union.py +27 -0
  286. kard/users/uploads/types/create_upload_part_response_object.py +39 -0
  287. kard/users/uploads/types/create_upload_request_data_union.py +26 -0
  288. kard/users/uploads/types/create_upload_request_object.py +36 -0
  289. kard/users/uploads/types/create_upload_response_data.py +25 -0
  290. kard/users/uploads/types/create_upload_response_data_union.py +27 -0
  291. kard/users/uploads/types/create_upload_response_object.py +37 -0
  292. kard/users/uploads/types/historical_transaction_complete_no_data.py +25 -0
  293. kard/users/uploads/types/start_historical_upload_no_data.py +20 -0
  294. kard/users/uploads/types/update_upload_request_data_union.py +27 -0
  295. kard/users/uploads/types/update_upload_request_object.py +37 -0
  296. kard/users/uploads/types/update_upload_response_data.py +25 -0
  297. kard/users/uploads/types/update_upload_response_data_union.py +27 -0
  298. kard/users/uploads/types/update_upload_response_object.py +37 -0
  299. kard/version.py +3 -0
  300. kard_financial_sdk-0.0.82.dist-info/METADATA +238 -0
  301. kard_financial_sdk-0.0.82.dist-info/RECORD +302 -0
  302. kard_financial_sdk-0.0.82.dist-info/WHEEL +4 -0
@@ -0,0 +1,639 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ..commons.types.organization_id import OrganizationId
6
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
7
+ from ..core.request_options import RequestOptions
8
+ from .raw_client import AsyncRawTransactionsClient, RawTransactionsClient
9
+ from .types.create_audit_request_data_union import CreateAuditRequestDataUnion
10
+ from .types.create_audit_response_body import CreateAuditResponseBody
11
+ from .types.fraudulent_transaction_data import FraudulentTransactionData
12
+ from .types.fraudulent_transaction_object import FraudulentTransactionObject
13
+ from .types.get_earned_rewards_response import GetEarnedRewardsResponse
14
+ from .types.transactions import Transactions
15
+ from .types.transactions_response import TransactionsResponse
16
+
17
+ # this is used as the default value for optional parameters
18
+ OMIT = typing.cast(typing.Any, ...)
19
+
20
+
21
+ class TransactionsClient:
22
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
23
+ self._raw_client = RawTransactionsClient(client_wrapper=client_wrapper)
24
+
25
+ @property
26
+ def with_raw_response(self) -> RawTransactionsClient:
27
+ """
28
+ Retrieves a raw implementation of this client that returns raw responses.
29
+
30
+ Returns
31
+ -------
32
+ RawTransactionsClient
33
+ """
34
+ return self._raw_client
35
+
36
+ def create(
37
+ self,
38
+ organization_id: OrganizationId,
39
+ *,
40
+ data: typing.Sequence[Transactions],
41
+ request_options: typing.Optional[RequestOptions] = None,
42
+ ) -> TransactionsResponse:
43
+ """
44
+ Call this endpoint to send all transactions made by all your enrolled users in your rewards program. The request body will depend on the transaction type.<br/>
45
+ Please use the correct type when calling the endpoint:
46
+ - `transaction`: These incoming transactions will be processed and matched by the Kard system. Learn more about the [Transaction CLO Matching](https://github.com/kard-financial/kard-postman#c-transaction-clo-matching) flow here.
47
+ - `matchedTransaction`: For pre-matched transactions that need validation on match by the Kard system.<br/>
48
+
49
+ <b>Required scopes:</b> `transaction:write`<br/>
50
+ <b>Note:</b> `Maximum of 500 transactions can be created per request`.
51
+
52
+ Parameters
53
+ ----------
54
+ organization_id : OrganizationId
55
+
56
+ data : typing.Sequence[Transactions]
57
+ Discriminated union representing the request body for submitting a transaction.
58
+ Use `type` to distinguish between the two:
59
+ - `transaction`: For transactions requiring processing and matching by the Kard system.
60
+ - `matchedTransaction`: For pre-matched transactions that need validation on match by the Kard system.
61
+
62
+ request_options : typing.Optional[RequestOptions]
63
+ Request-specific configuration.
64
+
65
+ Returns
66
+ -------
67
+ TransactionsResponse
68
+
69
+ Examples
70
+ --------
71
+ import datetime
72
+
73
+ from kard import KardApi
74
+ from kard.transactions import (
75
+ Merchant,
76
+ ProcessorMid_Visa,
77
+ Transactions_Transaction,
78
+ TransactionsAttributes,
79
+ VisaMidDetails,
80
+ )
81
+
82
+ client = KardApi(
83
+ client_id="YOUR_CLIENT_ID",
84
+ client_secret="YOUR_CLIENT_SECRET",
85
+ )
86
+ client.transactions.create(
87
+ organization_id="organization-123",
88
+ data=[
89
+ Transactions_Transaction(
90
+ id="309rjfoincor3icno3rind093cdow3jciwjdwcm",
91
+ attributes=TransactionsAttributes(
92
+ user_id="6FHt5b6Fnp0qdomMEy5AN6PXcSJIeX69",
93
+ status="APPROVED",
94
+ amount=1000,
95
+ subtotal=800,
96
+ currency="USD",
97
+ direction="DEBIT",
98
+ payment_type="CARD",
99
+ description="ADVANCEAUTO",
100
+ description_2="ADVANCEAUTO",
101
+ mcc="1234",
102
+ card_bin="123456",
103
+ card_last_four="4321",
104
+ authorization_date=datetime.datetime.fromisoformat(
105
+ "2021-07-02 17:47:06+00:00",
106
+ ),
107
+ merchant=Merchant(
108
+ id="12345678901234567",
109
+ name="ADVANCEAUTO",
110
+ addr_street="125 Main St",
111
+ addr_city="Philadelphia",
112
+ addr_state="PA",
113
+ addr_zipcode="19147",
114
+ addr_country="United States",
115
+ latitude="37.9419429",
116
+ longitude="-73.1446869",
117
+ store_id="12345",
118
+ ),
119
+ authorization_code="123456",
120
+ retrieval_reference_number="100804333919",
121
+ acquirer_reference_number="1234567890123456789012345678",
122
+ system_trace_audit_number="333828",
123
+ transaction_id="2467de37-cbdc-416d-a359-75de87bfffb0",
124
+ card_product_id="1234567890123456789012345678",
125
+ processor_mids=ProcessorMid_Visa(
126
+ mids=VisaMidDetails(
127
+ vmid="12345678901",
128
+ vsid="12345678",
129
+ ),
130
+ ),
131
+ ),
132
+ )
133
+ ],
134
+ )
135
+ """
136
+ _response = self._raw_client.create(organization_id, data=data, request_options=request_options)
137
+ return _response.data
138
+
139
+ def create_fraud_markers(
140
+ self,
141
+ organization_id: OrganizationId,
142
+ *,
143
+ data: typing.Sequence[FraudulentTransactionData],
144
+ request_options: typing.Optional[RequestOptions] = None,
145
+ ) -> FraudulentTransactionObject:
146
+ """
147
+ Call this endpoint to flag a submitted transaction as fraudulent. This will prevent it from being rewarded.<br/>
148
+
149
+ <b>Required scopes:</b>&nbsp;&nbsp;`transaction:write`<br/>
150
+ <b>Note:</b> `Maximum of 500 fraudulent transactions can be created per request`.
151
+
152
+ Parameters
153
+ ----------
154
+ organization_id : OrganizationId
155
+
156
+ data : typing.Sequence[FraudulentTransactionData]
157
+ List of fraudulent transactions to report
158
+
159
+ request_options : typing.Optional[RequestOptions]
160
+ Request-specific configuration.
161
+
162
+ Returns
163
+ -------
164
+ FraudulentTransactionObject
165
+
166
+ Examples
167
+ --------
168
+ from kard import KardApi
169
+ from kard.transactions import (
170
+ FraudulentTransactionAttributes,
171
+ FraudulentTransactionData,
172
+ )
173
+
174
+ client = KardApi(
175
+ client_id="YOUR_CLIENT_ID",
176
+ client_secret="YOUR_CLIENT_SECRET",
177
+ )
178
+ client.transactions.create_fraud_markers(
179
+ organization_id="organization-123",
180
+ data=[
181
+ FraudulentTransactionData(
182
+ id="myTxnId12345",
183
+ type="fraudulentTransaction",
184
+ attributes=FraudulentTransactionAttributes(
185
+ user_id="userId123",
186
+ ),
187
+ )
188
+ ],
189
+ )
190
+ """
191
+ _response = self._raw_client.create_fraud_markers(organization_id, data=data, request_options=request_options)
192
+ return _response.data
193
+
194
+ def create_audits(
195
+ self,
196
+ organization_id: OrganizationId,
197
+ user_id: str,
198
+ *,
199
+ data: typing.Sequence[CreateAuditRequestDataUnion],
200
+ request_options: typing.Optional[RequestOptions] = None,
201
+ ) -> CreateAuditResponseBody:
202
+ """
203
+ Call this endpoint to request that a particular transaction be audited further by the Kard system, in the event of a missing cashback claim, incorrect cashback amount claim or other mis-match claims.<br/>
204
+ <b>Required scopes:</b> `audit:write`
205
+
206
+ Parameters
207
+ ----------
208
+ organization_id : OrganizationId
209
+
210
+ user_id : str
211
+ The ID of the user as defined on the issuers system
212
+
213
+ data : typing.Sequence[CreateAuditRequestDataUnion]
214
+
215
+ request_options : typing.Optional[RequestOptions]
216
+ Request-specific configuration.
217
+
218
+ Returns
219
+ -------
220
+ CreateAuditResponseBody
221
+
222
+ Examples
223
+ --------
224
+ from kard import KardApi
225
+ from kard.transactions import AuditAttributes, CreateAuditRequestDataUnion_Audit
226
+
227
+ client = KardApi(
228
+ client_id="YOUR_CLIENT_ID",
229
+ client_secret="YOUR_CLIENT_SECRET",
230
+ )
231
+ client.transactions.create_audits(
232
+ organization_id="organization-123",
233
+ user_id="user-123",
234
+ data=[
235
+ CreateAuditRequestDataUnion_Audit(
236
+ attributes=AuditAttributes(
237
+ audit_code=8001,
238
+ merchant_name="Caribbean Goodness",
239
+ audit_description="duplicate transaction",
240
+ transaction_id="issuerTransaction123",
241
+ ),
242
+ )
243
+ ],
244
+ )
245
+ """
246
+ _response = self._raw_client.create_audits(organization_id, user_id, data=data, request_options=request_options)
247
+ return _response.data
248
+
249
+ def get_earned_rewards(
250
+ self,
251
+ organization_id: OrganizationId,
252
+ user_id: str,
253
+ *,
254
+ page_after: typing.Optional[str] = None,
255
+ page_before: typing.Optional[str] = None,
256
+ page_size: typing.Optional[int] = None,
257
+ request_options: typing.Optional[RequestOptions] = None,
258
+ ) -> GetEarnedRewardsResponse:
259
+ """
260
+ Retrieve rewarded transaction history for a specific user. Returns only SETTLED transactions within the last 12 months.
261
+ <br/>
262
+ <b>Required scopes:</b> `transaction:read`
263
+ <br/>
264
+ <b>Query Limit:</b> Maximum of 12 months of transaction data can be queried.
265
+
266
+ Parameters
267
+ ----------
268
+ organization_id : OrganizationId
269
+
270
+ user_id : str
271
+ The ID of the user as defined on the issuers system
272
+
273
+ page_after : typing.Optional[str]
274
+ Cursor for next page (base64-encoded timestamp + transaction ID)
275
+
276
+ page_before : typing.Optional[str]
277
+ Cursor for previous page (base64-encoded timestamp + transaction ID)
278
+
279
+ page_size : typing.Optional[int]
280
+ Number of results per page
281
+
282
+ request_options : typing.Optional[RequestOptions]
283
+ Request-specific configuration.
284
+
285
+ Returns
286
+ -------
287
+ GetEarnedRewardsResponse
288
+
289
+ Examples
290
+ --------
291
+ from kard import KardApi
292
+
293
+ client = KardApi(
294
+ client_id="YOUR_CLIENT_ID",
295
+ client_secret="YOUR_CLIENT_SECRET",
296
+ )
297
+ client.transactions.get_earned_rewards(
298
+ organization_id="org-123",
299
+ user_id="user-456",
300
+ page_size=10,
301
+ )
302
+ """
303
+ _response = self._raw_client.get_earned_rewards(
304
+ organization_id,
305
+ user_id,
306
+ page_after=page_after,
307
+ page_before=page_before,
308
+ page_size=page_size,
309
+ request_options=request_options,
310
+ )
311
+ return _response.data
312
+
313
+
314
+ class AsyncTransactionsClient:
315
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
316
+ self._raw_client = AsyncRawTransactionsClient(client_wrapper=client_wrapper)
317
+
318
+ @property
319
+ def with_raw_response(self) -> AsyncRawTransactionsClient:
320
+ """
321
+ Retrieves a raw implementation of this client that returns raw responses.
322
+
323
+ Returns
324
+ -------
325
+ AsyncRawTransactionsClient
326
+ """
327
+ return self._raw_client
328
+
329
+ async def create(
330
+ self,
331
+ organization_id: OrganizationId,
332
+ *,
333
+ data: typing.Sequence[Transactions],
334
+ request_options: typing.Optional[RequestOptions] = None,
335
+ ) -> TransactionsResponse:
336
+ """
337
+ Call this endpoint to send all transactions made by all your enrolled users in your rewards program. The request body will depend on the transaction type.<br/>
338
+ Please use the correct type when calling the endpoint:
339
+ - `transaction`: These incoming transactions will be processed and matched by the Kard system. Learn more about the [Transaction CLO Matching](https://github.com/kard-financial/kard-postman#c-transaction-clo-matching) flow here.
340
+ - `matchedTransaction`: For pre-matched transactions that need validation on match by the Kard system.<br/>
341
+
342
+ <b>Required scopes:</b> `transaction:write`<br/>
343
+ <b>Note:</b> `Maximum of 500 transactions can be created per request`.
344
+
345
+ Parameters
346
+ ----------
347
+ organization_id : OrganizationId
348
+
349
+ data : typing.Sequence[Transactions]
350
+ Discriminated union representing the request body for submitting a transaction.
351
+ Use `type` to distinguish between the two:
352
+ - `transaction`: For transactions requiring processing and matching by the Kard system.
353
+ - `matchedTransaction`: For pre-matched transactions that need validation on match by the Kard system.
354
+
355
+ request_options : typing.Optional[RequestOptions]
356
+ Request-specific configuration.
357
+
358
+ Returns
359
+ -------
360
+ TransactionsResponse
361
+
362
+ Examples
363
+ --------
364
+ import asyncio
365
+ import datetime
366
+
367
+ from kard import AsyncKardApi
368
+ from kard.transactions import (
369
+ Merchant,
370
+ ProcessorMid_Visa,
371
+ Transactions_Transaction,
372
+ TransactionsAttributes,
373
+ VisaMidDetails,
374
+ )
375
+
376
+ client = AsyncKardApi(
377
+ client_id="YOUR_CLIENT_ID",
378
+ client_secret="YOUR_CLIENT_SECRET",
379
+ )
380
+
381
+
382
+ async def main() -> None:
383
+ await client.transactions.create(
384
+ organization_id="organization-123",
385
+ data=[
386
+ Transactions_Transaction(
387
+ id="309rjfoincor3icno3rind093cdow3jciwjdwcm",
388
+ attributes=TransactionsAttributes(
389
+ user_id="6FHt5b6Fnp0qdomMEy5AN6PXcSJIeX69",
390
+ status="APPROVED",
391
+ amount=1000,
392
+ subtotal=800,
393
+ currency="USD",
394
+ direction="DEBIT",
395
+ payment_type="CARD",
396
+ description="ADVANCEAUTO",
397
+ description_2="ADVANCEAUTO",
398
+ mcc="1234",
399
+ card_bin="123456",
400
+ card_last_four="4321",
401
+ authorization_date=datetime.datetime.fromisoformat(
402
+ "2021-07-02 17:47:06+00:00",
403
+ ),
404
+ merchant=Merchant(
405
+ id="12345678901234567",
406
+ name="ADVANCEAUTO",
407
+ addr_street="125 Main St",
408
+ addr_city="Philadelphia",
409
+ addr_state="PA",
410
+ addr_zipcode="19147",
411
+ addr_country="United States",
412
+ latitude="37.9419429",
413
+ longitude="-73.1446869",
414
+ store_id="12345",
415
+ ),
416
+ authorization_code="123456",
417
+ retrieval_reference_number="100804333919",
418
+ acquirer_reference_number="1234567890123456789012345678",
419
+ system_trace_audit_number="333828",
420
+ transaction_id="2467de37-cbdc-416d-a359-75de87bfffb0",
421
+ card_product_id="1234567890123456789012345678",
422
+ processor_mids=ProcessorMid_Visa(
423
+ mids=VisaMidDetails(
424
+ vmid="12345678901",
425
+ vsid="12345678",
426
+ ),
427
+ ),
428
+ ),
429
+ )
430
+ ],
431
+ )
432
+
433
+
434
+ asyncio.run(main())
435
+ """
436
+ _response = await self._raw_client.create(organization_id, data=data, request_options=request_options)
437
+ return _response.data
438
+
439
+ async def create_fraud_markers(
440
+ self,
441
+ organization_id: OrganizationId,
442
+ *,
443
+ data: typing.Sequence[FraudulentTransactionData],
444
+ request_options: typing.Optional[RequestOptions] = None,
445
+ ) -> FraudulentTransactionObject:
446
+ """
447
+ Call this endpoint to flag a submitted transaction as fraudulent. This will prevent it from being rewarded.<br/>
448
+
449
+ <b>Required scopes:</b>&nbsp;&nbsp;`transaction:write`<br/>
450
+ <b>Note:</b> `Maximum of 500 fraudulent transactions can be created per request`.
451
+
452
+ Parameters
453
+ ----------
454
+ organization_id : OrganizationId
455
+
456
+ data : typing.Sequence[FraudulentTransactionData]
457
+ List of fraudulent transactions to report
458
+
459
+ request_options : typing.Optional[RequestOptions]
460
+ Request-specific configuration.
461
+
462
+ Returns
463
+ -------
464
+ FraudulentTransactionObject
465
+
466
+ Examples
467
+ --------
468
+ import asyncio
469
+
470
+ from kard import AsyncKardApi
471
+ from kard.transactions import (
472
+ FraudulentTransactionAttributes,
473
+ FraudulentTransactionData,
474
+ )
475
+
476
+ client = AsyncKardApi(
477
+ client_id="YOUR_CLIENT_ID",
478
+ client_secret="YOUR_CLIENT_SECRET",
479
+ )
480
+
481
+
482
+ async def main() -> None:
483
+ await client.transactions.create_fraud_markers(
484
+ organization_id="organization-123",
485
+ data=[
486
+ FraudulentTransactionData(
487
+ id="myTxnId12345",
488
+ type="fraudulentTransaction",
489
+ attributes=FraudulentTransactionAttributes(
490
+ user_id="userId123",
491
+ ),
492
+ )
493
+ ],
494
+ )
495
+
496
+
497
+ asyncio.run(main())
498
+ """
499
+ _response = await self._raw_client.create_fraud_markers(
500
+ organization_id, data=data, request_options=request_options
501
+ )
502
+ return _response.data
503
+
504
+ async def create_audits(
505
+ self,
506
+ organization_id: OrganizationId,
507
+ user_id: str,
508
+ *,
509
+ data: typing.Sequence[CreateAuditRequestDataUnion],
510
+ request_options: typing.Optional[RequestOptions] = None,
511
+ ) -> CreateAuditResponseBody:
512
+ """
513
+ Call this endpoint to request that a particular transaction be audited further by the Kard system, in the event of a missing cashback claim, incorrect cashback amount claim or other mis-match claims.<br/>
514
+ <b>Required scopes:</b> `audit:write`
515
+
516
+ Parameters
517
+ ----------
518
+ organization_id : OrganizationId
519
+
520
+ user_id : str
521
+ The ID of the user as defined on the issuers system
522
+
523
+ data : typing.Sequence[CreateAuditRequestDataUnion]
524
+
525
+ request_options : typing.Optional[RequestOptions]
526
+ Request-specific configuration.
527
+
528
+ Returns
529
+ -------
530
+ CreateAuditResponseBody
531
+
532
+ Examples
533
+ --------
534
+ import asyncio
535
+
536
+ from kard import AsyncKardApi
537
+ from kard.transactions import AuditAttributes, CreateAuditRequestDataUnion_Audit
538
+
539
+ client = AsyncKardApi(
540
+ client_id="YOUR_CLIENT_ID",
541
+ client_secret="YOUR_CLIENT_SECRET",
542
+ )
543
+
544
+
545
+ async def main() -> None:
546
+ await client.transactions.create_audits(
547
+ organization_id="organization-123",
548
+ user_id="user-123",
549
+ data=[
550
+ CreateAuditRequestDataUnion_Audit(
551
+ attributes=AuditAttributes(
552
+ audit_code=8001,
553
+ merchant_name="Caribbean Goodness",
554
+ audit_description="duplicate transaction",
555
+ transaction_id="issuerTransaction123",
556
+ ),
557
+ )
558
+ ],
559
+ )
560
+
561
+
562
+ asyncio.run(main())
563
+ """
564
+ _response = await self._raw_client.create_audits(
565
+ organization_id, user_id, data=data, request_options=request_options
566
+ )
567
+ return _response.data
568
+
569
+ async def get_earned_rewards(
570
+ self,
571
+ organization_id: OrganizationId,
572
+ user_id: str,
573
+ *,
574
+ page_after: typing.Optional[str] = None,
575
+ page_before: typing.Optional[str] = None,
576
+ page_size: typing.Optional[int] = None,
577
+ request_options: typing.Optional[RequestOptions] = None,
578
+ ) -> GetEarnedRewardsResponse:
579
+ """
580
+ Retrieve rewarded transaction history for a specific user. Returns only SETTLED transactions within the last 12 months.
581
+ <br/>
582
+ <b>Required scopes:</b> `transaction:read`
583
+ <br/>
584
+ <b>Query Limit:</b> Maximum of 12 months of transaction data can be queried.
585
+
586
+ Parameters
587
+ ----------
588
+ organization_id : OrganizationId
589
+
590
+ user_id : str
591
+ The ID of the user as defined on the issuers system
592
+
593
+ page_after : typing.Optional[str]
594
+ Cursor for next page (base64-encoded timestamp + transaction ID)
595
+
596
+ page_before : typing.Optional[str]
597
+ Cursor for previous page (base64-encoded timestamp + transaction ID)
598
+
599
+ page_size : typing.Optional[int]
600
+ Number of results per page
601
+
602
+ request_options : typing.Optional[RequestOptions]
603
+ Request-specific configuration.
604
+
605
+ Returns
606
+ -------
607
+ GetEarnedRewardsResponse
608
+
609
+ Examples
610
+ --------
611
+ import asyncio
612
+
613
+ from kard import AsyncKardApi
614
+
615
+ client = AsyncKardApi(
616
+ client_id="YOUR_CLIENT_ID",
617
+ client_secret="YOUR_CLIENT_SECRET",
618
+ )
619
+
620
+
621
+ async def main() -> None:
622
+ await client.transactions.get_earned_rewards(
623
+ organization_id="org-123",
624
+ user_id="user-456",
625
+ page_size=10,
626
+ )
627
+
628
+
629
+ asyncio.run(main())
630
+ """
631
+ _response = await self._raw_client.get_earned_rewards(
632
+ organization_id,
633
+ user_id,
634
+ page_after=page_after,
635
+ page_before=page_before,
636
+ page_size=page_size,
637
+ request_options=request_options,
638
+ )
639
+ return _response.data
@@ -0,0 +1,40 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .create_audit_multi_status import CreateAuditMultiStatus
10
+ from .create_incoming_transactions_multi_status import CreateIncomingTransactionsMultiStatus
11
+ from .fraud_multi_status import FraudMultiStatus
12
+ _dynamic_imports: typing.Dict[str, str] = {
13
+ "CreateAuditMultiStatus": ".create_audit_multi_status",
14
+ "CreateIncomingTransactionsMultiStatus": ".create_incoming_transactions_multi_status",
15
+ "FraudMultiStatus": ".fraud_multi_status",
16
+ }
17
+
18
+
19
+ def __getattr__(attr_name: str) -> typing.Any:
20
+ module_name = _dynamic_imports.get(attr_name)
21
+ if module_name is None:
22
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
23
+ try:
24
+ module = import_module(module_name, __package__)
25
+ if module_name == f".{attr_name}":
26
+ return module
27
+ else:
28
+ return getattr(module, attr_name)
29
+ except ImportError as e:
30
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
31
+ except AttributeError as e:
32
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
33
+
34
+
35
+ def __dir__():
36
+ lazy_attrs = list(_dynamic_imports.keys())
37
+ return sorted(lazy_attrs)
38
+
39
+
40
+ __all__ = ["CreateAuditMultiStatus", "CreateIncomingTransactionsMultiStatus", "FraudMultiStatus"]
@@ -0,0 +1,11 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.api_error import ApiError
6
+ from ..types.create_audit_multi_status_response import CreateAuditMultiStatusResponse
7
+
8
+
9
+ class CreateAuditMultiStatus(ApiError):
10
+ def __init__(self, body: CreateAuditMultiStatusResponse, headers: typing.Optional[typing.Dict[str, str]] = None):
11
+ super().__init__(status_code=207, headers=headers, body=body)
@@ -0,0 +1,11 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.api_error import ApiError
6
+ from ..types.transactions_multi_response import TransactionsMultiResponse
7
+
8
+
9
+ class CreateIncomingTransactionsMultiStatus(ApiError):
10
+ def __init__(self, body: TransactionsMultiResponse, headers: typing.Optional[typing.Dict[str, str]] = None):
11
+ super().__init__(status_code=207, headers=headers, body=body)