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,215 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....commons.types.links import Links
7
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .eligibility_location_included import EligibilityLocationIncluded
9
+ from .location_data import LocationData
10
+
11
+
12
+ class LocationsResponseObject(UniversalBaseModel):
13
+ """
14
+ Examples
15
+ --------
16
+ import datetime
17
+
18
+ from kard.commons import Links, RelationshipData, RelationshipMultiple
19
+ from kard.users.rewards import (
20
+ Amount,
21
+ Asset,
22
+ CategoryFields,
23
+ CategoryIncluded,
24
+ Commission,
25
+ Coordinates,
26
+ EligibilityLocationAddress,
27
+ LocationAttributes,
28
+ LocationData,
29
+ LocationRelationships,
30
+ LocationsResponseObject,
31
+ OfferDataUnion_StandardOffer,
32
+ OperationHours,
33
+ OperationPeriod,
34
+ OperationTime,
35
+ StandardOfferFields,
36
+ )
37
+
38
+ LocationsResponseObject(
39
+ data=[
40
+ LocationData(
41
+ id="5e27318c9b346f00087fba8l",
42
+ attributes=LocationAttributes(
43
+ name="Worlds Greatest Chicken",
44
+ address=EligibilityLocationAddress(
45
+ street="120 Main St",
46
+ city="Philadelphia",
47
+ state="PA",
48
+ zip_code="19147",
49
+ ),
50
+ coordinates=Coordinates(
51
+ longitude=-75.1446869,
52
+ latitude=39.9419429,
53
+ ),
54
+ phone="+1 (123) 555-8880",
55
+ operation_hours=OperationHours(
56
+ periods=[
57
+ OperationPeriod(
58
+ close=OperationTime(
59
+ day=1,
60
+ time="1700",
61
+ ),
62
+ open=OperationTime(
63
+ day=1,
64
+ time="0900",
65
+ ),
66
+ ),
67
+ OperationPeriod(
68
+ close=OperationTime(
69
+ day=2,
70
+ time="1700",
71
+ ),
72
+ open=OperationTime(
73
+ day=2,
74
+ time="0900",
75
+ ),
76
+ ),
77
+ OperationPeriod(
78
+ close=OperationTime(
79
+ day=3,
80
+ time="1700",
81
+ ),
82
+ open=OperationTime(
83
+ day=3,
84
+ time="0900",
85
+ ),
86
+ ),
87
+ OperationPeriod(
88
+ close=OperationTime(
89
+ day=4,
90
+ time="1700",
91
+ ),
92
+ open=OperationTime(
93
+ day=4,
94
+ time="0900",
95
+ ),
96
+ ),
97
+ OperationPeriod(
98
+ close=OperationTime(
99
+ day=5,
100
+ time="1700",
101
+ ),
102
+ open=OperationTime(
103
+ day=5,
104
+ time="0900",
105
+ ),
106
+ ),
107
+ ],
108
+ weekday_text=[
109
+ "Monday: 9:00 AM – 5:00 PM",
110
+ "Tuesday: 9:00 AM – 5:00 PM",
111
+ "Wednesday: 9:00 AM – 5:00 PM",
112
+ "Thursday: 9:00 AM – 5:00 PM",
113
+ "Friday: 9:00 AM – 5:00 PM",
114
+ "Saturday: Closed",
115
+ "Sunday: Closed",
116
+ ],
117
+ ),
118
+ ),
119
+ relationships=LocationRelationships(
120
+ offers=RelationshipMultiple(
121
+ data=[
122
+ RelationshipData(
123
+ type="standardOffer",
124
+ id="5e27318c9b346f00087fbb5b",
125
+ )
126
+ ],
127
+ ),
128
+ category=RelationshipMultiple(
129
+ data=[
130
+ RelationshipData(
131
+ type="category",
132
+ id="65920081b524d126068de24a",
133
+ )
134
+ ],
135
+ ),
136
+ ),
137
+ )
138
+ ],
139
+ included=[
140
+ CategoryIncluded(
141
+ id="65920081b524d126068de24a",
142
+ attributes=CategoryFields(
143
+ name="Food & Beverage",
144
+ ),
145
+ ),
146
+ OfferDataUnion_StandardOffer(
147
+ id="5e27318c9b346f00087fbb5c",
148
+ attributes=StandardOfferFields(
149
+ name="Worlds Greatest Chicken",
150
+ terms="Worlds Greatest Chicken offers are only available within US Locations.",
151
+ purchase_channel=["INSTORE"],
152
+ user_reward=Commission(
153
+ type="PERCENT",
154
+ value=5.7,
155
+ ),
156
+ start_date=datetime.datetime.fromisoformat(
157
+ "2022-01-01 05:00:00+00:00",
158
+ ),
159
+ expiration_date=datetime.datetime.fromisoformat(
160
+ "2022-01-01 05:00:00+00:00",
161
+ ),
162
+ min_reward_amount=Amount(
163
+ type="CENTS",
164
+ value=500,
165
+ ),
166
+ max_reward_amount=Amount(
167
+ type="CENTS",
168
+ value=2000,
169
+ ),
170
+ min_transaction_amount=Amount(
171
+ type="CENTS",
172
+ value=500,
173
+ ),
174
+ max_transaction_amount=Amount(
175
+ type="CENTS",
176
+ value=2000,
177
+ ),
178
+ max_redemptions=1,
179
+ is_targeted=True,
180
+ assets=[
181
+ Asset(
182
+ type="IMG_VIEW",
183
+ url="http://assets.getkard.com/logo/img?attribution-tokens",
184
+ alt="Worlds Greatest Chicken Logo Image",
185
+ ),
186
+ Asset(
187
+ type="BANNER_VIEW",
188
+ url="http://assets.getkard.com/banner/img?attribution-tokens",
189
+ alt="Worlds Greatest Chicken Banner Image",
190
+ ),
191
+ ],
192
+ website_url="http://worldsgreatestchickent.test.com",
193
+ description="Worlds Greatest Chicken brings you the tastiest crispy, double fried spicy chicken in the world.",
194
+ ),
195
+ ),
196
+ ],
197
+ links=Links(
198
+ self_="/v2/issuers/{organizationId}/users/{userId}/locations?page[size]=1&filter[latitude]=39.9419429&filter[longitude]=-75.1446869&filter[radius]=10&include=offers,categories",
199
+ next="/v2/issuers/{organizationId}/users/{userId}/locations?page[after]=NDMyNzQyODI3OTQw&page[size]=1&filter[latitude]=39.9419429&filter[longitude]=-75.1446869&filter[radius]=10&include=offers,categories",
200
+ ),
201
+ )
202
+ """
203
+
204
+ data: typing.List[LocationData]
205
+ links: Links
206
+ included: typing.Optional[typing.List[EligibilityLocationIncluded]] = None
207
+
208
+ if IS_PYDANTIC_V2:
209
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
210
+ else:
211
+
212
+ class Config:
213
+ frozen = True
214
+ smart_union = True
215
+ extra = pydantic.Extra.allow
@@ -0,0 +1,103 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import datetime as dt
4
+ import typing
5
+
6
+ import pydantic
7
+ import typing_extensions
8
+ from ....commons.types.purchase_channel import PurchaseChannel
9
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
10
+ from ....core.serialization import FieldMetadata
11
+ from .amount import Amount
12
+ from .asset import Asset
13
+ from .commission import Commission
14
+
15
+
16
+ class OfferCommonFields(UniversalBaseModel):
17
+ terms: str = pydantic.Field()
18
+ """
19
+ Terms and conditions on offer
20
+ """
21
+
22
+ max_redemptions: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="maxRedemptions")] = (
23
+ pydantic.Field(default=None)
24
+ )
25
+ """
26
+ Maximum times cardholder can redeem offer, if applicable
27
+ """
28
+
29
+ name: str = pydantic.Field()
30
+ """
31
+ Name of offer
32
+ """
33
+
34
+ purchase_channel: typing_extensions.Annotated[typing.List[PurchaseChannel], FieldMetadata(alias="purchaseChannel")]
35
+ user_reward: typing_extensions.Annotated[Commission, FieldMetadata(alias="userReward")]
36
+ assets: typing.List[Asset] = pydantic.Field()
37
+ """
38
+ Assets associated with offer
39
+ """
40
+
41
+ start_date: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="startDate")] = pydantic.Field()
42
+ """
43
+ Beginning date of offer (UTC)
44
+ """
45
+
46
+ expiration_date: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="expirationDate")] = pydantic.Field()
47
+ """
48
+ Expiration date of offer if applicable (UTC)
49
+ """
50
+
51
+ is_targeted: typing_extensions.Annotated[bool, FieldMetadata(alias="isTargeted")] = pydantic.Field()
52
+ """
53
+ True returns only targeted offers, false returns only non-targeted offers
54
+ """
55
+
56
+ min_transaction_amount: typing_extensions.Annotated[
57
+ typing.Optional[Amount], FieldMetadata(alias="minTransactionAmount")
58
+ ] = pydantic.Field(default=None)
59
+ """
60
+ Minimum Transaction Amount required to redeem offer, if available on offer
61
+ """
62
+
63
+ max_transaction_amount: typing_extensions.Annotated[
64
+ typing.Optional[Amount], FieldMetadata(alias="maxTransactionAmount")
65
+ ] = pydantic.Field(default=None)
66
+ """
67
+ Maximum Transaction Amount allowed to redeem offer, if available on offer
68
+ """
69
+
70
+ min_reward_amount: typing_extensions.Annotated[typing.Optional[Amount], FieldMetadata(alias="minRewardAmount")] = (
71
+ pydantic.Field(default=None)
72
+ )
73
+ """
74
+ Minimum Reward Amount, if available on offer
75
+ """
76
+
77
+ max_reward_amount: typing_extensions.Annotated[typing.Optional[Amount], FieldMetadata(alias="maxRewardAmount")] = (
78
+ pydantic.Field(default=None)
79
+ )
80
+ """
81
+ Maximum Reward Amount, if available on offer
82
+ """
83
+
84
+ website_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="websiteUrl")] = pydantic.Field(
85
+ default=None
86
+ )
87
+ """
88
+ URL to the website of the offer provider
89
+ """
90
+
91
+ description: typing.Optional[str] = pydantic.Field(default=None)
92
+ """
93
+ Description of the offer
94
+ """
95
+
96
+ if IS_PYDANTIC_V2:
97
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
98
+ else:
99
+
100
+ class Config:
101
+ frozen = True
102
+ smart_union = True
103
+ extra = pydantic.Extra.allow
@@ -0,0 +1,30 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+
5
+ import typing
6
+
7
+ import pydantic
8
+ from ....commons.types.mongo_id import MongoId
9
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
10
+ from .eligibility_offer_relationship import EligibilityOfferRelationship
11
+ from .standard_offer_fields import StandardOfferFields
12
+
13
+
14
+ class OfferDataUnion_StandardOffer(UniversalBaseModel):
15
+ type: typing.Literal["standardOffer"] = "standardOffer"
16
+ relationships: typing.Optional[EligibilityOfferRelationship] = None
17
+ id: MongoId
18
+ attributes: StandardOfferFields
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
28
+
29
+
30
+ OfferDataUnion = OfferDataUnion_StandardOffer
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....commons.types.relationship_multiple import RelationshipMultiple
7
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+
9
+
10
+ class OfferRelationship(UniversalBaseModel):
11
+ offers: RelationshipMultiple
12
+ category: RelationshipMultiple
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -0,0 +1,7 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ OfferSortOptions = typing.Union[
6
+ typing.Literal["startDate", "-startDate", "expirationDate", "-expirationDate", "name", "-name"], typing.Any
7
+ ]
@@ -0,0 +1,130 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....commons.types.links import Links
7
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .eligibility_offer_included import EligibilityOfferIncluded
9
+ from .offer_data_union import OfferDataUnion
10
+
11
+
12
+ class OffersResponseObject(UniversalBaseModel):
13
+ """
14
+ Examples
15
+ --------
16
+ import datetime
17
+
18
+ from kard.commons import Links
19
+ from kard.users.rewards import (
20
+ Amount,
21
+ Asset,
22
+ CategoryData,
23
+ CategoryFields,
24
+ CategoryIncluded,
25
+ CategoryRelationship,
26
+ CategoryRelationshipObject,
27
+ Commission,
28
+ OfferDataUnion_StandardOffer,
29
+ OffersResponseObject,
30
+ StandardOfferFields,
31
+ )
32
+
33
+ OffersResponseObject(
34
+ data=[
35
+ OfferDataUnion_StandardOffer(
36
+ id="5e27318c9b346f00087fbb5c",
37
+ attributes=StandardOfferFields(
38
+ name="Worlds Greatest Chicken",
39
+ terms="Worlds Greatest Chicken offers are only available within US Locations.",
40
+ purchase_channel=["INSTORE"],
41
+ user_reward=Commission(
42
+ type="PERCENT",
43
+ value=5.7,
44
+ ),
45
+ start_date=datetime.datetime.fromisoformat(
46
+ "2024-11-17 05:00:00+00:00",
47
+ ),
48
+ expiration_date=datetime.datetime.fromisoformat(
49
+ "2025-03-17 05:00:00+00:00",
50
+ ),
51
+ min_reward_amount=Amount(
52
+ type="CENTS",
53
+ value=500,
54
+ ),
55
+ max_reward_amount=Amount(
56
+ type="CENTS",
57
+ value=2000,
58
+ ),
59
+ min_transaction_amount=Amount(
60
+ type="CENTS",
61
+ value=500,
62
+ ),
63
+ max_transaction_amount=Amount(
64
+ type="CENTS",
65
+ value=10000,
66
+ ),
67
+ max_redemptions=1,
68
+ is_targeted=True,
69
+ assets=[
70
+ Asset(
71
+ type="IMG_VIEW",
72
+ url="http://assets.getkard.com/logo/img?attribution-tokens",
73
+ alt="Worlds Greatest Chicken Logo Image",
74
+ ),
75
+ Asset(
76
+ type="BANNER_VIEW",
77
+ url="http://assets.getkard.com/banner/img?attribution-tokens",
78
+ alt="Worlds Greatest Chicken Banner Image",
79
+ ),
80
+ ],
81
+ website_url="http://worldsgreatestchickent.test.com",
82
+ description="Worlds Greatest Chicken brings you the tastiest crispy, double fried spicy chicken in the world.",
83
+ ),
84
+ relationships=CategoryRelationshipObject(
85
+ category=CategoryRelationship(
86
+ data=[
87
+ CategoryData(
88
+ id="65920081b524d126068de24a",
89
+ ),
90
+ CategoryData(
91
+ id="65920081b524d126068de24c",
92
+ ),
93
+ ],
94
+ ),
95
+ ),
96
+ )
97
+ ],
98
+ included=[
99
+ CategoryIncluded(
100
+ id="65920081b524d126068de24a",
101
+ attributes=CategoryFields(
102
+ name="Food & Beverage",
103
+ ),
104
+ ),
105
+ CategoryIncluded(
106
+ id="65920081b524d126068de24c",
107
+ attributes=CategoryFields(
108
+ name="Department Stores",
109
+ ),
110
+ ),
111
+ ],
112
+ links=Links(
113
+ self_="/v2/issuers/{organizationId}/users/{userId}/offers?page[size]=1?sort=-startDate",
114
+ next="/v2/issuers/{organizationId}/users/{userId}/offers?page[after]=NDMyNzQyODI3OTQw&page[size]=1?&sort=-startDate",
115
+ ),
116
+ )
117
+ """
118
+
119
+ data: typing.List[OfferDataUnion]
120
+ links: Links
121
+ included: typing.Optional[typing.List[EligibilityOfferIncluded]] = None
122
+
123
+ if IS_PYDANTIC_V2:
124
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
125
+ else:
126
+
127
+ class Config:
128
+ frozen = True
129
+ smart_union = True
130
+ extra = pydantic.Extra.allow
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from ....core.serialization import FieldMetadata
9
+ from .operation_period import OperationPeriod
10
+
11
+
12
+ class OperationHours(UniversalBaseModel):
13
+ periods: typing.List[OperationPeriod]
14
+ weekday_text: typing_extensions.Annotated[typing.List[str], FieldMetadata(alias="weekdayText")]
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .operation_time import OperationTime
8
+
9
+
10
+ class OperationPeriod(UniversalBaseModel):
11
+ close: OperationTime
12
+ open: OperationTime
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -0,0 +1,20 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+
8
+
9
+ class OperationTime(UniversalBaseModel):
10
+ day: int
11
+ time: str
12
+
13
+ if IS_PYDANTIC_V2:
14
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
15
+ else:
16
+
17
+ class Config:
18
+ frozen = True
19
+ smart_union = True
20
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from .eligibility_offer_relationship import EligibilityOfferRelationship
8
+ from .standard_offer_core import StandardOfferCore
9
+
10
+
11
+ class StandardOffer(StandardOfferCore):
12
+ relationships: typing.Optional[EligibilityOfferRelationship] = None
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -0,0 +1,26 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....commons.types.mongo_id import MongoId
7
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from .standard_offer_fields import StandardOfferFields
9
+
10
+
11
+ class StandardOfferCore(UniversalBaseModel):
12
+ id: MongoId = pydantic.Field()
13
+ """
14
+ Offer ID in Kard's system
15
+ """
16
+
17
+ attributes: StandardOfferFields
18
+
19
+ if IS_PYDANTIC_V2:
20
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
21
+ else:
22
+
23
+ class Config:
24
+ frozen = True
25
+ smart_union = True
26
+ extra = pydantic.Extra.allow
@@ -0,0 +1,18 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from .offer_common_fields import OfferCommonFields
8
+
9
+
10
+ class StandardOfferFields(OfferCommonFields):
11
+ if IS_PYDANTIC_V2:
12
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
13
+ else:
14
+
15
+ class Config:
16
+ frozen = True
17
+ smart_union = True
18
+ extra = pydantic.Extra.allow