distyra 0.1.0__tar.gz

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 (536) hide show
  1. distyra-0.1.0/.gitignore +90 -0
  2. distyra-0.1.0/PKG-INFO +130 -0
  3. distyra-0.1.0/README.md +109 -0
  4. distyra-0.1.0/distyra/__init__.py +34 -0
  5. distyra-0.1.0/distyra/client.py +219 -0
  6. distyra-0.1.0/distyra_api_client/__init__.py +8 -0
  7. distyra-0.1.0/distyra_api_client/api/__init__.py +1 -0
  8. distyra-0.1.0/distyra_api_client/api/authentication/__init__.py +1 -0
  9. distyra-0.1.0/distyra_api_client/api/authentication/rotate_api_key.py +163 -0
  10. distyra-0.1.0/distyra_api_client/api/catalog/__init__.py +1 -0
  11. distyra-0.1.0/distyra_api_client/api/catalog/get_categories.py +169 -0
  12. distyra-0.1.0/distyra_api_client/api/catalog/get_merchant.py +251 -0
  13. distyra-0.1.0/distyra_api_client/api/enrichment/__init__.py +1 -0
  14. distyra-0.1.0/distyra_api_client/api/enrichment/enrich_batch.py +329 -0
  15. distyra-0.1.0/distyra_api_client/api/enrichment/enrich_batch_async.py +268 -0
  16. distyra-0.1.0/distyra_api_client/api/enrichment/enrich_batch_async_status.py +232 -0
  17. distyra-0.1.0/distyra_api_client/api/enrichment/enrich_single.py +329 -0
  18. distyra-0.1.0/distyra_api_client/api/feedback/__init__.py +1 -0
  19. distyra-0.1.0/distyra_api_client/api/feedback/submit_confirmation.py +248 -0
  20. distyra-0.1.0/distyra_api_client/api/feedback/submit_correction.py +256 -0
  21. distyra-0.1.0/distyra_api_client/api/internal/__init__.py +1 -0
  22. distyra-0.1.0/distyra_api_client/api/internal/internal_crawl_mark_terminal.py +236 -0
  23. distyra-0.1.0/distyra_api_client/api/internal/internal_crawl_reenqueue.py +236 -0
  24. distyra-0.1.0/distyra_api_client/api/system/__init__.py +1 -0
  25. distyra-0.1.0/distyra_api_client/api/system/get_health.py +145 -0
  26. distyra-0.1.0/distyra_api_client/api/underwriting/__init__.py +1 -0
  27. distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant.py +384 -0
  28. distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_parsed_statement.py +350 -0
  29. distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_parsed_statement_async.py +322 -0
  30. distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_statement.py +467 -0
  31. distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_statement_async.py +327 -0
  32. distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_statement_async_status.py +244 -0
  33. distyra-0.1.0/distyra_api_client/api/underwriting/create_collection_link.py +240 -0
  34. distyra-0.1.0/distyra_api_client/api/underwriting/finish_collection_analyze.py +302 -0
  35. distyra-0.1.0/distyra_api_client/api/underwriting/get_collection_link.py +224 -0
  36. distyra-0.1.0/distyra_api_client/api/underwriting/get_ingestion.py +244 -0
  37. distyra-0.1.0/distyra_api_client/api/underwriting/get_underwriting_analysis.py +272 -0
  38. distyra-0.1.0/distyra_api_client/api/underwriting/get_underwriting_analysis_report.py +331 -0
  39. distyra-0.1.0/distyra_api_client/api/underwriting/ingest_statement.py +633 -0
  40. distyra-0.1.0/distyra_api_client/api/underwriting/ingest_statement_batch.py +510 -0
  41. distyra-0.1.0/distyra_api_client/api/underwriting/list_collection_links.py +151 -0
  42. distyra-0.1.0/distyra_api_client/api/underwriting/list_ingestions.py +349 -0
  43. distyra-0.1.0/distyra_api_client/api/underwriting/list_underwriting_analyses.py +313 -0
  44. distyra-0.1.0/distyra_api_client/api/underwriting/revoke_collection_link.py +192 -0
  45. distyra-0.1.0/distyra_api_client/api/underwriting/stage_collection_file.py +300 -0
  46. distyra-0.1.0/distyra_api_client/api/underwriting/submit_underwriting_feedback.py +320 -0
  47. distyra-0.1.0/distyra_api_client/api/webhooks/__init__.py +1 -0
  48. distyra-0.1.0/distyra_api_client/api/webhooks/create_webhook_endpoint.py +236 -0
  49. distyra-0.1.0/distyra_api_client/api/webhooks/delete_webhook_endpoint.py +188 -0
  50. distyra-0.1.0/distyra_api_client/api/webhooks/get_webhook_endpoint.py +212 -0
  51. distyra-0.1.0/distyra_api_client/api/webhooks/list_webhook_endpoints.py +139 -0
  52. distyra-0.1.0/distyra_api_client/api/webhooks/rotate_webhook_endpoint_secret.py +228 -0
  53. distyra-0.1.0/distyra_api_client/client.py +268 -0
  54. distyra-0.1.0/distyra_api_client/errors.py +16 -0
  55. distyra-0.1.0/distyra_api_client/models/__init__.py +1189 -0
  56. distyra-0.1.0/distyra_api_client/models/analyze_applicant_body.py +157 -0
  57. distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_accounts_item.py +130 -0
  58. distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_accounts_item_transactions_item.py +48 -0
  59. distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_analysis_window.py +71 -0
  60. distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_input_mode_type_0.py +8 -0
  61. distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_input_mode_type_1.py +8 -0
  62. distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_options.py +62 -0
  63. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body.py +144 -0
  64. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body_accounts_item.py +49 -0
  65. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body_analysis_window.py +69 -0
  66. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body_source.py +60 -0
  67. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_202.py +106 -0
  68. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_202_status.py +8 -0
  69. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_400.py +71 -0
  70. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_401.py +71 -0
  71. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_403.py +71 -0
  72. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_422.py +71 -0
  73. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body.py +144 -0
  74. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body_accounts_item.py +49 -0
  75. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body_analysis_window.py +69 -0
  76. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body_source.py +60 -0
  77. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200.py +177 -0
  78. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_analysis_window.py +70 -0
  79. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_engine_versions.py +104 -0
  80. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence.py +138 -0
  81. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item.py +187 -0
  82. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item_reconciliation.py +130 -0
  83. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item_statement_period.py +67 -0
  84. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item_transactions_item.py +202 -0
  85. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_sources_item.py +91 -0
  86. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_warnings_item.py +75 -0
  87. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_features.py +52 -0
  88. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_400.py +71 -0
  89. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_401.py +71 -0
  90. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_402.py +71 -0
  91. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_403.py +71 -0
  92. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_409.py +71 -0
  93. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_422.py +71 -0
  94. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_202.py +106 -0
  95. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_202_status.py +8 -0
  96. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_400.py +71 -0
  97. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_401.py +71 -0
  98. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_403.py +71 -0
  99. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_413.py +71 -0
  100. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_415.py +71 -0
  101. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_422.py +71 -0
  102. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200.py +307 -0
  103. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_result_type_0.py +44 -0
  104. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_0.py +8 -0
  105. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_1.py +8 -0
  106. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_2.py +8 -0
  107. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_3.py +8 -0
  108. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_4.py +8 -0
  109. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_401.py +71 -0
  110. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_403.py +71 -0
  111. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_404.py +71 -0
  112. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200.py +172 -0
  113. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_analysis_window.py +70 -0
  114. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_engine_versions.py +104 -0
  115. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence.py +132 -0
  116. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item.py +185 -0
  117. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item_reconciliation.py +130 -0
  118. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item_statement_period.py +67 -0
  119. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item_transactions_item.py +202 -0
  120. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_sources_item.py +91 -0
  121. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_warnings_item.py +75 -0
  122. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_features.py +52 -0
  123. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_400.py +71 -0
  124. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_401.py +71 -0
  125. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_402.py +71 -0
  126. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_403.py +71 -0
  127. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_409.py +71 -0
  128. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_413.py +71 -0
  129. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_415.py +71 -0
  130. distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_422.py +71 -0
  131. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200.py +156 -0
  132. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_analysis_window.py +70 -0
  133. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_engine_versions.py +104 -0
  134. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence.py +132 -0
  135. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item.py +185 -0
  136. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item_reconciliation.py +130 -0
  137. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item_statement_period.py +67 -0
  138. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item_transactions_item.py +202 -0
  139. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_sources_item.py +91 -0
  140. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_warnings_item.py +75 -0
  141. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_features.py +52 -0
  142. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_400.py +71 -0
  143. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_401.py +71 -0
  144. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_402.py +71 -0
  145. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_403.py +71 -0
  146. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_409.py +71 -0
  147. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_413.py +71 -0
  148. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_415.py +71 -0
  149. distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_422.py +71 -0
  150. distyra-0.1.0/distyra_api_client/models/create_collection_link_body.py +72 -0
  151. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201.py +199 -0
  152. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_0.py +8 -0
  153. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_1.py +8 -0
  154. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_2.py +8 -0
  155. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_3.py +8 -0
  156. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_4.py +8 -0
  157. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_400.py +71 -0
  158. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_401.py +71 -0
  159. distyra-0.1.0/distyra_api_client/models/create_collection_link_response_403.py +71 -0
  160. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body.py +145 -0
  161. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_0.py +8 -0
  162. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_1.py +8 -0
  163. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_2.py +8 -0
  164. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_3.py +8 -0
  165. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201.py +213 -0
  166. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201_status_type_0.py +8 -0
  167. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201_status_type_1.py +8 -0
  168. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201_status_type_2.py +8 -0
  169. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_400.py +71 -0
  170. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_401.py +71 -0
  171. distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_403.py +71 -0
  172. distyra-0.1.0/distyra_api_client/models/delete_webhook_endpoint_response_401.py +71 -0
  173. distyra-0.1.0/distyra_api_client/models/delete_webhook_endpoint_response_403.py +71 -0
  174. distyra-0.1.0/distyra_api_client/models/delete_webhook_endpoint_response_404.py +71 -0
  175. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_body.py +73 -0
  176. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_body_items_item.py +115 -0
  177. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_202.py +104 -0
  178. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_202_status.py +8 -0
  179. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_400.py +71 -0
  180. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_401.py +71 -0
  181. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_402.py +71 -0
  182. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_403.py +71 -0
  183. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_429.py +71 -0
  184. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200.py +291 -0
  185. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_result_type_0_item.py +44 -0
  186. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_0.py +8 -0
  187. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_1.py +8 -0
  188. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_2.py +8 -0
  189. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_3.py +8 -0
  190. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_4.py +8 -0
  191. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_401.py +71 -0
  192. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_403.py +71 -0
  193. distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_404.py +71 -0
  194. distyra-0.1.0/distyra_api_client/models/enrich_batch_body.py +73 -0
  195. distyra-0.1.0/distyra_api_client/models/enrich_batch_body_items_item.py +124 -0
  196. distyra-0.1.0/distyra_api_client/models/enrich_batch_cache_only.py +9 -0
  197. distyra-0.1.0/distyra_api_client/models/enrich_batch_force_refresh.py +9 -0
  198. distyra-0.1.0/distyra_api_client/models/enrich_batch_min_confidence.py +10 -0
  199. distyra-0.1.0/distyra_api_client/models/enrich_batch_response_200.py +81 -0
  200. distyra-0.1.0/distyra_api_client/models/enrich_batch_response_200_results_item.py +44 -0
  201. distyra-0.1.0/distyra_api_client/models/enrich_batch_response_400.py +71 -0
  202. distyra-0.1.0/distyra_api_client/models/enrich_batch_response_401.py +71 -0
  203. distyra-0.1.0/distyra_api_client/models/enrich_batch_response_402.py +71 -0
  204. distyra-0.1.0/distyra_api_client/models/enrich_batch_response_403.py +71 -0
  205. distyra-0.1.0/distyra_api_client/models/enrich_batch_response_429.py +71 -0
  206. distyra-0.1.0/distyra_api_client/models/enrich_single_body.py +121 -0
  207. distyra-0.1.0/distyra_api_client/models/enrich_single_cache_only.py +9 -0
  208. distyra-0.1.0/distyra_api_client/models/enrich_single_force_refresh.py +9 -0
  209. distyra-0.1.0/distyra_api_client/models/enrich_single_min_confidence.py +10 -0
  210. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200.py +168 -0
  211. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_alternatives_item.py +67 -0
  212. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_availability.py +99 -0
  213. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_category.py +129 -0
  214. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_category_source_type_0.py +8 -0
  215. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_category_source_type_1.py +8 -0
  216. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_confidence.py +96 -0
  217. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_location.py +94 -0
  218. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant.py +342 -0
  219. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_brand_colors.py +44 -0
  220. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_confidence_bucket_type_0.py +8 -0
  221. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_confidence_bucket_type_1.py +8 -0
  222. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_confidence_bucket_type_2.py +8 -0
  223. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_0.py +8 -0
  224. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_1.py +8 -0
  225. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_2.py +8 -0
  226. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_3.py +8 -0
  227. distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_metadata.py +127 -0
  228. distyra-0.1.0/distyra_api_client/models/enrich_single_response_400.py +71 -0
  229. distyra-0.1.0/distyra_api_client/models/enrich_single_response_401.py +71 -0
  230. distyra-0.1.0/distyra_api_client/models/enrich_single_response_402.py +71 -0
  231. distyra-0.1.0/distyra_api_client/models/enrich_single_response_403.py +71 -0
  232. distyra-0.1.0/distyra_api_client/models/enrich_single_response_429.py +71 -0
  233. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_body.py +59 -0
  234. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_202.py +94 -0
  235. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_202_status.py +8 -0
  236. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_401.py +71 -0
  237. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_403.py +71 -0
  238. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_404.py +71 -0
  239. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_409.py +71 -0
  240. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_422.py +71 -0
  241. distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_503.py +71 -0
  242. distyra-0.1.0/distyra_api_client/models/get_categories_response_200.py +73 -0
  243. distyra-0.1.0/distyra_api_client/models/get_categories_response_200_industries_item.py +67 -0
  244. distyra-0.1.0/distyra_api_client/models/get_categories_response_401.py +71 -0
  245. distyra-0.1.0/distyra_api_client/models/get_categories_response_403.py +71 -0
  246. distyra-0.1.0/distyra_api_client/models/get_categories_response_429.py +71 -0
  247. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200.py +190 -0
  248. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_0.py +8 -0
  249. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_1.py +8 -0
  250. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_2.py +8 -0
  251. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_3.py +8 -0
  252. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_4.py +8 -0
  253. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_401.py +71 -0
  254. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_403.py +71 -0
  255. distyra-0.1.0/distyra_api_client/models/get_collection_link_response_404.py +71 -0
  256. distyra-0.1.0/distyra_api_client/models/get_health_response_200.py +112 -0
  257. distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks.py +113 -0
  258. distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_db_type_0.py +8 -0
  259. distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_db_type_1.py +8 -0
  260. distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_redis_type_0.py +8 -0
  261. distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_redis_type_1.py +8 -0
  262. distyra-0.1.0/distyra_api_client/models/get_health_response_200_status_type_0.py +8 -0
  263. distyra-0.1.0/distyra_api_client/models/get_health_response_200_status_type_1.py +8 -0
  264. distyra-0.1.0/distyra_api_client/models/get_health_response_503.py +112 -0
  265. distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks.py +113 -0
  266. distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_db_type_0.py +8 -0
  267. distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_db_type_1.py +8 -0
  268. distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_redis_type_0.py +8 -0
  269. distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_redis_type_1.py +8 -0
  270. distyra-0.1.0/distyra_api_client/models/get_health_response_503_status_type_0.py +8 -0
  271. distyra-0.1.0/distyra_api_client/models/get_health_response_503_status_type_1.py +8 -0
  272. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200.py +319 -0
  273. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_accounts_item.py +132 -0
  274. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_accounts_item_statement_period.py +67 -0
  275. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_errors_item.py +75 -0
  276. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_0.py +8 -0
  277. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_1.py +8 -0
  278. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_2.py +8 -0
  279. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_3.py +8 -0
  280. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_4.py +8 -0
  281. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_5.py +8 -0
  282. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_6.py +8 -0
  283. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_7.py +8 -0
  284. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_8.py +8 -0
  285. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_401.py +71 -0
  286. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_403.py +71 -0
  287. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_404.py +71 -0
  288. distyra-0.1.0/distyra_api_client/models/get_ingestion_response_410.py +71 -0
  289. distyra-0.1.0/distyra_api_client/models/get_merchant_response_200.py +167 -0
  290. distyra-0.1.0/distyra_api_client/models/get_merchant_response_200_brand_colors.py +44 -0
  291. distyra-0.1.0/distyra_api_client/models/get_merchant_response_400.py +71 -0
  292. distyra-0.1.0/distyra_api_client/models/get_merchant_response_401.py +71 -0
  293. distyra-0.1.0/distyra_api_client/models/get_merchant_response_403.py +71 -0
  294. distyra-0.1.0/distyra_api_client/models/get_merchant_response_404.py +71 -0
  295. distyra-0.1.0/distyra_api_client/models/get_merchant_response_429.py +71 -0
  296. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_format_type_0.py +8 -0
  297. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_format_type_1.py +8 -0
  298. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_400.py +71 -0
  299. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_401.py +71 -0
  300. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_403.py +71 -0
  301. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_404.py +71 -0
  302. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_410.py +71 -0
  303. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200.py +164 -0
  304. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_analysis_window.py +70 -0
  305. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_engine_versions.py +104 -0
  306. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence.py +132 -0
  307. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item.py +185 -0
  308. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item_reconciliation.py +130 -0
  309. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item_statement_period.py +67 -0
  310. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item_transactions_item.py +202 -0
  311. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_sources_item.py +91 -0
  312. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_warnings_item.py +75 -0
  313. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_features.py +52 -0
  314. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_401.py +71 -0
  315. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_403.py +71 -0
  316. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_404.py +71 -0
  317. distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_410.py +71 -0
  318. distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200.py +204 -0
  319. distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200_status_type_0.py +8 -0
  320. distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200_status_type_1.py +8 -0
  321. distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200_status_type_2.py +8 -0
  322. distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_401.py +71 -0
  323. distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_403.py +71 -0
  324. distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_404.py +71 -0
  325. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_0.py +8 -0
  326. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_1.py +8 -0
  327. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_2.py +8 -0
  328. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_3.py +8 -0
  329. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_4.py +8 -0
  330. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_5.py +8 -0
  331. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_6.py +8 -0
  332. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_7.py +8 -0
  333. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_8.py +8 -0
  334. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200.py +187 -0
  335. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item.py +338 -0
  336. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_accounts_item.py +134 -0
  337. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_accounts_item_statement_period.py +67 -0
  338. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_errors_item.py +75 -0
  339. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_0.py +8 -0
  340. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_1.py +8 -0
  341. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_2.py +8 -0
  342. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_3.py +8 -0
  343. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_4.py +8 -0
  344. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_5.py +8 -0
  345. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_6.py +8 -0
  346. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_7.py +8 -0
  347. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_8.py +8 -0
  348. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_skipped_item.py +67 -0
  349. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_source_type_0.py +8 -0
  350. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_source_type_1.py +8 -0
  351. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_400.py +71 -0
  352. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_401.py +71 -0
  353. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_0.py +71 -0
  354. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1.py +196 -0
  355. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item.py +338 -0
  356. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_accounts_item.py +134 -0
  357. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_accounts_item_statement_period.py +67 -0
  358. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_errors_item.py +75 -0
  359. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_0.py +8 -0
  360. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_1.py +8 -0
  361. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_2.py +8 -0
  362. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_3.py +8 -0
  363. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_4.py +8 -0
  364. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_5.py +8 -0
  365. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_6.py +8 -0
  366. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_7.py +8 -0
  367. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_8.py +8 -0
  368. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_skipped_item.py +67 -0
  369. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_source_type_0.py +8 -0
  370. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_source_type_1.py +8 -0
  371. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_403.py +71 -0
  372. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_413.py +71 -0
  373. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_415.py +71 -0
  374. distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_422.py +71 -0
  375. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_0.py +8 -0
  376. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_1.py +8 -0
  377. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_2.py +8 -0
  378. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_3.py +8 -0
  379. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_4.py +8 -0
  380. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_5.py +8 -0
  381. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_6.py +8 -0
  382. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_7.py +8 -0
  383. distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_8.py +8 -0
  384. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0.py +324 -0
  385. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_accounts_item.py +134 -0
  386. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_accounts_item_statement_period.py +67 -0
  387. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_errors_item.py +75 -0
  388. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_0.py +8 -0
  389. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_1.py +8 -0
  390. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_2.py +8 -0
  391. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_3.py +8 -0
  392. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_4.py +8 -0
  393. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_5.py +8 -0
  394. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_6.py +8 -0
  395. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_7.py +8 -0
  396. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_8.py +8 -0
  397. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1.py +189 -0
  398. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item.py +338 -0
  399. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_accounts_item.py +134 -0
  400. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_accounts_item_statement_period.py +67 -0
  401. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_errors_item.py +75 -0
  402. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_0.py +8 -0
  403. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_1.py +8 -0
  404. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_2.py +8 -0
  405. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_3.py +8 -0
  406. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_4.py +8 -0
  407. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_5.py +8 -0
  408. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_6.py +8 -0
  409. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_7.py +8 -0
  410. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_8.py +8 -0
  411. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_skipped_item.py +67 -0
  412. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_source_type_0.py +8 -0
  413. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_source_type_1.py +8 -0
  414. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_400.py +71 -0
  415. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_401.py +71 -0
  416. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_0.py +71 -0
  417. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1.py +189 -0
  418. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item.py +338 -0
  419. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_accounts_item.py +134 -0
  420. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_accounts_item_statement_period.py +67 -0
  421. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_errors_item.py +75 -0
  422. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_0.py +8 -0
  423. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_1.py +8 -0
  424. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_2.py +8 -0
  425. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_3.py +8 -0
  426. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_4.py +8 -0
  427. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_5.py +8 -0
  428. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_6.py +8 -0
  429. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_7.py +8 -0
  430. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_8.py +8 -0
  431. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_skipped_item.py +67 -0
  432. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_source_type_0.py +8 -0
  433. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_source_type_1.py +8 -0
  434. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_403.py +71 -0
  435. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_413.py +71 -0
  436. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_415.py +71 -0
  437. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_422.py +71 -0
  438. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_501.py +71 -0
  439. distyra-0.1.0/distyra_api_client/models/ingest_statement_response_503.py +71 -0
  440. distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_body.py +59 -0
  441. distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_200.py +104 -0
  442. distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_200_action_type_0.py +8 -0
  443. distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_200_action_type_1.py +8 -0
  444. distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_401.py +71 -0
  445. distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_403.py +71 -0
  446. distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_404.py +71 -0
  447. distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_body.py +59 -0
  448. distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_200.py +99 -0
  449. distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_200_action_type_0.py +8 -0
  450. distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_200_action_type_1.py +8 -0
  451. distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_401.py +71 -0
  452. distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_403.py +71 -0
  453. distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_404.py +71 -0
  454. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200.py +79 -0
  455. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item.py +202 -0
  456. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_0.py +8 -0
  457. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_1.py +8 -0
  458. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_2.py +8 -0
  459. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_3.py +8 -0
  460. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_4.py +8 -0
  461. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_401.py +71 -0
  462. distyra-0.1.0/distyra_api_client/models/list_collection_links_response_403.py +71 -0
  463. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_0.py +8 -0
  464. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_1.py +8 -0
  465. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_2.py +8 -0
  466. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_3.py +8 -0
  467. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_4.py +8 -0
  468. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_5.py +8 -0
  469. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_6.py +8 -0
  470. distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_7.py +8 -0
  471. distyra-0.1.0/distyra_api_client/models/list_ingestions_response_200.py +87 -0
  472. distyra-0.1.0/distyra_api_client/models/list_ingestions_response_200_items_item.py +135 -0
  473. distyra-0.1.0/distyra_api_client/models/list_ingestions_response_400.py +71 -0
  474. distyra-0.1.0/distyra_api_client/models/list_ingestions_response_401.py +71 -0
  475. distyra-0.1.0/distyra_api_client/models/list_ingestions_response_403.py +71 -0
  476. distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_200.py +92 -0
  477. distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_200_items_item.py +130 -0
  478. distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_400.py +71 -0
  479. distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_401.py +71 -0
  480. distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_403.py +71 -0
  481. distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200.py +75 -0
  482. distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item.py +211 -0
  483. distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item_status_type_0.py +8 -0
  484. distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item_status_type_1.py +8 -0
  485. distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item_status_type_2.py +8 -0
  486. distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_401.py +71 -0
  487. distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_403.py +71 -0
  488. distyra-0.1.0/distyra_api_client/models/revoke_collection_link_response_401.py +71 -0
  489. distyra-0.1.0/distyra_api_client/models/revoke_collection_link_response_403.py +71 -0
  490. distyra-0.1.0/distyra_api_client/models/revoke_collection_link_response_404.py +71 -0
  491. distyra-0.1.0/distyra_api_client/models/rotate_api_key_response_200.py +85 -0
  492. distyra-0.1.0/distyra_api_client/models/rotate_api_key_response_401.py +71 -0
  493. distyra-0.1.0/distyra_api_client/models/rotate_api_key_response_500.py +71 -0
  494. distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200.py +219 -0
  495. distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200_status_type_0.py +8 -0
  496. distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200_status_type_1.py +8 -0
  497. distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200_status_type_2.py +8 -0
  498. distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_401.py +71 -0
  499. distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_403.py +71 -0
  500. distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_404.py +71 -0
  501. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_201.py +91 -0
  502. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_400.py +71 -0
  503. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_401.py +71 -0
  504. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_403.py +71 -0
  505. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_404.py +71 -0
  506. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_409.py +71 -0
  507. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_413.py +71 -0
  508. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_415.py +71 -0
  509. distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_503.py +71 -0
  510. distyra-0.1.0/distyra_api_client/models/submit_confirmation_body.py +71 -0
  511. distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_200.py +69 -0
  512. distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_400.py +71 -0
  513. distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_401.py +71 -0
  514. distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_403.py +71 -0
  515. distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_429.py +71 -0
  516. distyra-0.1.0/distyra_api_client/models/submit_correction_body.py +91 -0
  517. distyra-0.1.0/distyra_api_client/models/submit_correction_response_200.py +69 -0
  518. distyra-0.1.0/distyra_api_client/models/submit_correction_response_400.py +71 -0
  519. distyra-0.1.0/distyra_api_client/models/submit_correction_response_401.py +71 -0
  520. distyra-0.1.0/distyra_api_client/models/submit_correction_response_403.py +71 -0
  521. distyra-0.1.0/distyra_api_client/models/submit_correction_response_429.py +71 -0
  522. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body.py +111 -0
  523. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item.py +165 -0
  524. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_corrected_payload.py +52 -0
  525. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_correction_type_type_0.py +8 -0
  526. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_correction_type_type_1.py +8 -0
  527. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_correction_type_type_2.py +8 -0
  528. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_200.py +98 -0
  529. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_400.py +71 -0
  530. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_401.py +71 -0
  531. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_403.py +71 -0
  532. distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_404.py +71 -0
  533. distyra-0.1.0/distyra_api_client/py.typed +1 -0
  534. distyra-0.1.0/distyra_api_client/types.py +54 -0
  535. distyra-0.1.0/pyproject.toml +49 -0
  536. distyra-0.1.0/tests/test_smoke.py +183 -0
@@ -0,0 +1,90 @@
1
+ node_modules/
2
+ dist/
3
+ .wrangler/
4
+ .dev.vars
5
+ *.log
6
+ .DS_Store
7
+ .env
8
+ .env.local
9
+
10
+ # Python (packages/saas-sdk-python)
11
+ __pycache__/
12
+ *.egg-info/
13
+ .venv/
14
+
15
+ # Deployment-specific files (never commit real credentials)
16
+ .env.secrets
17
+ .env.production
18
+ .scaleway-config
19
+ scripts/netcup-frozen/.netcup-config
20
+ scripts/netcup-frozen/backup.env
21
+
22
+ # OVH deploy: .ovh-config is COMMITTED but ansible-vault encrypted; only the
23
+ # vault password file is gitignored. See scripts/ovh/VAULT.md.
24
+ scripts/ovh/.vault_pass
25
+
26
+ # DR Phase 1: provisioning orchestrator (provision-de1.sh) writes captured
27
+ # public IPs here for downstream scripts. Contains no secrets (IPs are public)
28
+ # but is per-environment state, not source. The operator copies values from
29
+ # this file into the ansible-vault via `ansible-vault edit`.
30
+ scripts/ovh/.de1-provisioned.json
31
+
32
+ # DR Phase 2: etcd cluster TLS certificate material. Generated locally by
33
+ # scripts/ovh/etcd/gen-certs.sh, distributed via SSH to the 3 cluster nodes.
34
+ # Contains the etcd CA private key — operator MUST back this up to offline
35
+ # paper-anchor storage alongside the vault password.
36
+ scripts/ovh/etcd/certs/
37
+
38
+ # DR Phase 2c-prep: Patroni cluster-internal secrets (replication password,
39
+ # rewind password, REST API HTTP basic auth). Generated locally by
40
+ # scripts/ovh/patroni/setup-patroni-de1-replica.sh, distributed via SSH to
41
+ # Patroni nodes. Used by Patroni for inter-node auth + the management API.
42
+ # Back up to offline storage alongside etcd/certs/ca-key.pem.
43
+ scripts/ovh/patroni/secrets/
44
+ redis-data/
45
+ .scaleway/
46
+ *.scw
47
+ *.pem
48
+
49
+ # Cloudflare backup exports (contain merchant data)
50
+ cf-backup/
51
+
52
+ # Real bank-statement fixtures for parser/ingest testing (never commit)
53
+ statements/
54
+
55
+ # Build outputs
56
+ *.tgz
57
+
58
+ # Eval-harness CSV outputs
59
+ out/
60
+
61
+ # Next.js dev/build artifacts (apps/admin)
62
+ .next/
63
+
64
+ # Deprecated Cloudflare code
65
+ deprecated/
66
+
67
+ # Claude Code session-local artifacts
68
+ .claude/
69
+
70
+ # Smoke-test working dir (scripts/test-sek-canary.ts writes synthetic
71
+ # fixtures here; never commit real or synthetic bank-statement payloads)
72
+ tmp/
73
+
74
+ # HTTP archives (DevTools/Charles exports). They capture full
75
+ # request/response incl. auth headers, cookies, OAuth code/state and
76
+ # App Attest assertions, so they MUST never be committed (privacy policy).
77
+ # Two were found tracked in docs/ on 2026-06-01; see HISTORY_PURGE_NEEDED.md.
78
+ *.har
79
+
80
+ # TypeScript incremental build cache. Was tracked by mistake; it is a build
81
+ # artifact that re-dirties the tree on every compile. Untracked 2026-06-02.
82
+ *.tsbuildinfo
83
+
84
+ # Local-only docs, kept OUT of git by deliberate choice (2026-06-02):
85
+ # - docs/Distyra-Logo/: brand design working material (mockups, scratch, a ZIP,
86
+ # a generated image) — not code-repo content; lives on the operator's machine.
87
+ # - the Enable Banking agreement: a confidential signed contract that must not
88
+ # sit in clonable git history; keep it in the document store instead.
89
+ docs/Distyra-Logo/
90
+ docs/Enable_Banking_Agreement.pdf
distyra-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,130 @@
1
+ Metadata-Version: 2.4
2
+ Name: distyra
3
+ Version: 0.1.0
4
+ Summary: Python client for the Distyra Transaction Enrichment API (enrichment + SME underwriting)
5
+ Project-URL: Homepage, https://distyra.com
6
+ Project-URL: Documentation, https://api.distyra.com/docs
7
+ Author: Brightfield Software
8
+ License: MIT
9
+ Keywords: distyra,open banking,psd2,transaction enrichment,underwriting
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3 :: Only
14
+ Classifier: Topic :: Office/Business :: Financial
15
+ Classifier: Typing :: Typed
16
+ Requires-Python: >=3.9
17
+ Requires-Dist: attrs>=22.2.0
18
+ Requires-Dist: httpx<0.29.0,>=0.23.0
19
+ Requires-Dist: python-dateutil<3,>=2.8.0
20
+ Description-Content-Type: text/markdown
21
+
22
+ # distyra
23
+
24
+ Python client for the [Distyra Transaction Enrichment API](https://api.distyra.com/docs): transaction enrichment and SME cash-flow underwriting for EU lenders.
25
+
26
+ ```bash
27
+ pip install distyra
28
+ ```
29
+
30
+ ## Quick start
31
+
32
+ ```python
33
+ import os
34
+ from distyra import Distyra
35
+
36
+ client = Distyra(api_key=os.environ["DISTYRA_API_KEY"])
37
+
38
+ result = client.enrich(
39
+ descriptor="ALBERT HEIJN 1234 AMSTERDAM NL",
40
+ amount=-12.34,
41
+ currency="EUR",
42
+ mcc="5411",
43
+ )
44
+ print(result.merchant.name) # "Albert Heijn"
45
+ print(result.category.primary) # "Retail & E-commerce"
46
+ print(result.category.source) # "catalog" (curated) or "llm" (model-proposed)
47
+ ```
48
+
49
+ ## Batch enrichment
50
+
51
+ ```python
52
+ batch = client.enrich_batch([
53
+ {"descriptor": "ALBERT HEIJN 1234 AMSTERDAM NL", "amount": -12.34, "currency": "EUR"},
54
+ {"descriptor": "NS GROEP B.V.", "amount": -4.50, "currency": "EUR"},
55
+ {"descriptor": "NETFLIX.COM", "amount": -13.99, "currency": "EUR"},
56
+ ])
57
+ for item in batch.items:
58
+ print(item)
59
+ ```
60
+
61
+ Up to 100 items per call; a failed item occupies its slot with an error envelope, the batch itself never fails.
62
+
63
+ ## Underwriting
64
+
65
+ Statement files in, one consolidated analysis out. Multiple files for the same applicant (the "last 6 months as 6 monthly PDFs" case) consolidate into one analysis over the merged window:
66
+
67
+ ```python
68
+ analysis = client.analyze_statement(
69
+ ["jan.pdf", "feb.pdf", "mar.pdf"],
70
+ applicant_id="loan-2026-0142",
71
+ input_mode="statement_pdf", # one format per analysis
72
+ enrich=True, # optional: enrich every transaction
73
+ )
74
+ print(analysis.id, analysis.features)
75
+ ```
76
+
77
+ JSON mode, when transactions are already on hand:
78
+
79
+ ```python
80
+ analysis = client.analyze(
81
+ applicant_id="loan-2026-0142",
82
+ input_mode="raw",
83
+ accounts=[{
84
+ "account_id": "main",
85
+ "currency": "EUR",
86
+ "opening_balance": 1500.0,
87
+ "transactions": [
88
+ {"date": "2026-05-01", "amount": 2500.0, "descriptor_raw": "INVOICE 1001 ACME BV"},
89
+ {"date": "2026-05-15", "amount": -1200.0, "descriptor_raw": "RENT MAY OFFICE"},
90
+ ],
91
+ }],
92
+ )
93
+ ```
94
+
95
+ Fetch a stored analysis later with `client.get_analysis(analysis_id)`.
96
+
97
+ Note: enrichment is self-serve; underwriting endpoints are enabled per organization. Contact sales for access.
98
+
99
+ ## Errors
100
+
101
+ Every non-2xx raises `DistyraError` with the parsed envelope:
102
+
103
+ ```python
104
+ from distyra import Distyra, DistyraError
105
+
106
+ try:
107
+ client.enrich(descriptor="...")
108
+ except DistyraError as e:
109
+ print(e.status_code, e.error, e.detail)
110
+ ```
111
+
112
+ ## Beyond the wrapper
113
+
114
+ The full generated client (every endpoint, typed models) ships in the same distribution as `distyra_api_client`. The wrapper's `.raw` attribute is a ready-authenticated instance:
115
+
116
+ ```python
117
+ from distyra_api_client.api.catalog import get_categories
118
+
119
+ categories = get_categories.sync(client=client.raw)
120
+ ```
121
+
122
+ ## Development
123
+
124
+ This package lives in the Distyra monorepo at `packages/saas-sdk-python/`. The `distyra_api_client` package is generated from the committed OpenAPI snapshot — do not edit it by hand:
125
+
126
+ ```bash
127
+ npm run snapshot -w @brightfield/saas-api # refresh openapi.json from source
128
+ bash scripts/generate-python-sdk.sh # regenerate distyra_api_client
129
+ bash scripts/test-python-sdk.sh # build wheel + smoke
130
+ ```
@@ -0,0 +1,109 @@
1
+ # distyra
2
+
3
+ Python client for the [Distyra Transaction Enrichment API](https://api.distyra.com/docs): transaction enrichment and SME cash-flow underwriting for EU lenders.
4
+
5
+ ```bash
6
+ pip install distyra
7
+ ```
8
+
9
+ ## Quick start
10
+
11
+ ```python
12
+ import os
13
+ from distyra import Distyra
14
+
15
+ client = Distyra(api_key=os.environ["DISTYRA_API_KEY"])
16
+
17
+ result = client.enrich(
18
+ descriptor="ALBERT HEIJN 1234 AMSTERDAM NL",
19
+ amount=-12.34,
20
+ currency="EUR",
21
+ mcc="5411",
22
+ )
23
+ print(result.merchant.name) # "Albert Heijn"
24
+ print(result.category.primary) # "Retail & E-commerce"
25
+ print(result.category.source) # "catalog" (curated) or "llm" (model-proposed)
26
+ ```
27
+
28
+ ## Batch enrichment
29
+
30
+ ```python
31
+ batch = client.enrich_batch([
32
+ {"descriptor": "ALBERT HEIJN 1234 AMSTERDAM NL", "amount": -12.34, "currency": "EUR"},
33
+ {"descriptor": "NS GROEP B.V.", "amount": -4.50, "currency": "EUR"},
34
+ {"descriptor": "NETFLIX.COM", "amount": -13.99, "currency": "EUR"},
35
+ ])
36
+ for item in batch.items:
37
+ print(item)
38
+ ```
39
+
40
+ Up to 100 items per call; a failed item occupies its slot with an error envelope, the batch itself never fails.
41
+
42
+ ## Underwriting
43
+
44
+ Statement files in, one consolidated analysis out. Multiple files for the same applicant (the "last 6 months as 6 monthly PDFs" case) consolidate into one analysis over the merged window:
45
+
46
+ ```python
47
+ analysis = client.analyze_statement(
48
+ ["jan.pdf", "feb.pdf", "mar.pdf"],
49
+ applicant_id="loan-2026-0142",
50
+ input_mode="statement_pdf", # one format per analysis
51
+ enrich=True, # optional: enrich every transaction
52
+ )
53
+ print(analysis.id, analysis.features)
54
+ ```
55
+
56
+ JSON mode, when transactions are already on hand:
57
+
58
+ ```python
59
+ analysis = client.analyze(
60
+ applicant_id="loan-2026-0142",
61
+ input_mode="raw",
62
+ accounts=[{
63
+ "account_id": "main",
64
+ "currency": "EUR",
65
+ "opening_balance": 1500.0,
66
+ "transactions": [
67
+ {"date": "2026-05-01", "amount": 2500.0, "descriptor_raw": "INVOICE 1001 ACME BV"},
68
+ {"date": "2026-05-15", "amount": -1200.0, "descriptor_raw": "RENT MAY OFFICE"},
69
+ ],
70
+ }],
71
+ )
72
+ ```
73
+
74
+ Fetch a stored analysis later with `client.get_analysis(analysis_id)`.
75
+
76
+ Note: enrichment is self-serve; underwriting endpoints are enabled per organization. Contact sales for access.
77
+
78
+ ## Errors
79
+
80
+ Every non-2xx raises `DistyraError` with the parsed envelope:
81
+
82
+ ```python
83
+ from distyra import Distyra, DistyraError
84
+
85
+ try:
86
+ client.enrich(descriptor="...")
87
+ except DistyraError as e:
88
+ print(e.status_code, e.error, e.detail)
89
+ ```
90
+
91
+ ## Beyond the wrapper
92
+
93
+ The full generated client (every endpoint, typed models) ships in the same distribution as `distyra_api_client`. The wrapper's `.raw` attribute is a ready-authenticated instance:
94
+
95
+ ```python
96
+ from distyra_api_client.api.catalog import get_categories
97
+
98
+ categories = get_categories.sync(client=client.raw)
99
+ ```
100
+
101
+ ## Development
102
+
103
+ This package lives in the Distyra monorepo at `packages/saas-sdk-python/`. The `distyra_api_client` package is generated from the committed OpenAPI snapshot — do not edit it by hand:
104
+
105
+ ```bash
106
+ npm run snapshot -w @brightfield/saas-api # refresh openapi.json from source
107
+ bash scripts/generate-python-sdk.sh # regenerate distyra_api_client
108
+ bash scripts/test-python-sdk.sh # build wheel + smoke
109
+ ```
@@ -0,0 +1,34 @@
1
+ """distyra — Python client for the Distyra Transaction Enrichment API.
2
+
3
+ Two layers, mirroring the TypeScript SDK (@brightfield/saas-sdk):
4
+
5
+ - ``distyra_api_client`` — fully generated from the OpenAPI snapshot in
6
+ apps/saas-api/openapi.json (openapi-python-client). Typed models +
7
+ per-endpoint modules. Use it directly for anything the wrapper below
8
+ doesn't cover::
9
+
10
+ from distyra_api_client.api.catalog import get_categories
11
+ cats = get_categories.sync(client=sdk.raw)
12
+
13
+ - ``Distyra`` — opinionated wrapper for the headline calls: enrich,
14
+ enrich_batch, analyze (JSON mode), analyze_statement (multipart file
15
+ upload — hand-rolled because Fastify's multipart endpoints carry no
16
+ body schema in the spec), get_analysis.
17
+
18
+ Regenerate after any saas-api schema change (from the repo root):
19
+
20
+ 1. npm run snapshot -w @brightfield/saas-api # refresh openapi.json
21
+ 2. bash scripts/generate-python-sdk.sh # regen distyra_api_client
22
+
23
+ The committed snapshot makes regen reproducible from git without a running
24
+ server — same contract as the TS SDK.
25
+ """
26
+
27
+ from .client import (
28
+ Distyra,
29
+ DistyraError,
30
+ PRODUCTION_BASE_URL,
31
+ )
32
+
33
+ __all__ = ["Distyra", "DistyraError", "PRODUCTION_BASE_URL"]
34
+ __version__ = "0.1.0"
@@ -0,0 +1,219 @@
1
+ """Opinionated wrapper around the generated ``distyra_api_client``.
2
+
3
+ Raises ``DistyraError`` on every non-2xx so happy-path code never touches
4
+ status unions; drops to the generated layer (``.raw``) for everything else.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ from pathlib import Path
11
+ from typing import Any, Iterable, Optional, Sequence, Union
12
+
13
+ from distyra_api_client import AuthenticatedClient
14
+ from distyra_api_client.api.enrichment import enrich_batch, enrich_single
15
+ from distyra_api_client.api.underwriting import (
16
+ analyze_applicant,
17
+ get_underwriting_analysis,
18
+ )
19
+ from distyra_api_client.models import (
20
+ AnalyzeApplicantBody,
21
+ AnalyzeApplicantFromStatementResponse200,
22
+ AnalyzeApplicantResponse200,
23
+ EnrichBatchBody,
24
+ EnrichBatchResponse200,
25
+ EnrichSingleBody,
26
+ EnrichSingleResponse200,
27
+ GetUnderwritingAnalysisResponse200,
28
+ )
29
+ from distyra_api_client.types import Response
30
+
31
+ #: Production base URL — Bunny Shield → Caddy origin → saas-api. Mirrors the
32
+ #: OpenAPI ``servers[0]`` entry; kept in sync by hand (same contract as the
33
+ #: TS SDK's PRODUCTION_BASE_URL).
34
+ PRODUCTION_BASE_URL = "https://api.distyra.com"
35
+
36
+ #: One statement file: a path, raw bytes, or a (filename, bytes) /
37
+ #: (filename, bytes, content_type) tuple.
38
+ StatementFile = Union[str, Path, bytes, tuple]
39
+
40
+ _CONTENT_TYPES = {
41
+ ".xml": "application/xml",
42
+ ".sta": "text/plain",
43
+ ".mt940": "text/plain",
44
+ ".940": "text/plain",
45
+ ".txt": "text/plain",
46
+ ".pdf": "application/pdf",
47
+ ".csv": "text/csv",
48
+ }
49
+
50
+
51
+ class DistyraError(Exception):
52
+ """Non-2xx API response. Carries the parsed error envelope when present."""
53
+
54
+ def __init__(self, status_code: int, error: str, detail: Optional[str] = None):
55
+ self.status_code = status_code
56
+ self.error = error
57
+ self.detail = detail
58
+ super().__init__(
59
+ f"HTTP {status_code}: {error}" + (f" — {detail}" if detail else "")
60
+ )
61
+
62
+ @classmethod
63
+ def from_response(cls, status_code: int, content: bytes) -> "DistyraError":
64
+ try:
65
+ body = json.loads(content)
66
+ return cls(status_code, body.get("error", "unknown_error"), body.get("detail"))
67
+ except (json.JSONDecodeError, AttributeError):
68
+ return cls(status_code, content.decode(errors="replace")[:200] or "unknown_error")
69
+
70
+
71
+ def _unwrap(resp: Response, ok_type: type) -> Any:
72
+ """Return the parsed 2xx model or raise DistyraError."""
73
+ if 200 <= resp.status_code < 300 and isinstance(resp.parsed, ok_type):
74
+ return resp.parsed
75
+ raise DistyraError.from_response(resp.status_code, resp.content)
76
+
77
+
78
+ class Distyra:
79
+ """Client for the Distyra Transaction Enrichment API.
80
+
81
+ Example::
82
+
83
+ from distyra import Distyra
84
+
85
+ client = Distyra(api_key=os.environ["DISTYRA_API_KEY"])
86
+ result = client.enrich(
87
+ descriptor="ALBERT HEIJN 1234 AMSTERDAM NL",
88
+ amount=-12.34,
89
+ currency="EUR",
90
+ )
91
+ print(result.merchant.name, result.category.primary, result.category.source)
92
+
93
+ ``base_url`` defaults to production; override for local/staging. The
94
+ underlying generated client (httpx) is exposed as ``.raw`` for endpoints
95
+ the wrapper doesn't cover.
96
+ """
97
+
98
+ def __init__(
99
+ self,
100
+ api_key: str,
101
+ *,
102
+ base_url: str = PRODUCTION_BASE_URL,
103
+ timeout: float = 30.0,
104
+ **httpx_kwargs: Any,
105
+ ):
106
+ if not api_key:
107
+ raise ValueError("Distyra: api_key is required")
108
+ import httpx # local import keeps module import cheap
109
+
110
+ self.raw = AuthenticatedClient(
111
+ base_url=base_url,
112
+ token=api_key,
113
+ timeout=httpx.Timeout(timeout),
114
+ raise_on_unexpected_status=False,
115
+ **httpx_kwargs,
116
+ )
117
+
118
+ # ─── Enrichment ────────────────────────────────────────────────────────
119
+
120
+ def enrich(self, descriptor: str, **fields: Any) -> EnrichSingleResponse200:
121
+ """POST /v1/enrich — synchronous single-transaction cascade.
122
+
123
+ ``fields``: amount, currency, mcc, country_hint, merchant_name,
124
+ bank_code_description (all optional, see the API reference).
125
+ """
126
+ body = EnrichSingleBody.from_dict({"descriptor": descriptor, **fields})
127
+ resp = enrich_single.sync_detailed(client=self.raw, body=body)
128
+ return _unwrap(resp, EnrichSingleResponse200)
129
+
130
+ def enrich_batch(self, items: Iterable[dict]) -> EnrichBatchResponse200:
131
+ """POST /v1/enrich/batch — up to 100 items, per-item failure slots."""
132
+ body = EnrichBatchBody.from_dict({"items": list(items)})
133
+ resp = enrich_batch.sync_detailed(client=self.raw, body=body)
134
+ return _unwrap(resp, EnrichBatchResponse200)
135
+
136
+ # ─── Underwriting ──────────────────────────────────────────────────────
137
+
138
+ def analyze(self, **payload: Any) -> AnalyzeApplicantResponse200:
139
+ """POST /v1/underwrite/analyze — JSON mode (raw or enriched txns).
140
+
141
+ ``payload`` is the request body: applicant_id, input_mode, accounts,
142
+ analysis_window?, options? — see the API reference.
143
+ """
144
+ body = AnalyzeApplicantBody.from_dict(payload)
145
+ resp = analyze_applicant.sync_detailed(client=self.raw, body=body)
146
+ return _unwrap(resp, AnalyzeApplicantResponse200)
147
+
148
+ def analyze_statement(
149
+ self,
150
+ files: Union[StatementFile, Sequence[StatementFile]],
151
+ *,
152
+ applicant_id: str,
153
+ input_mode: str,
154
+ enrich: bool = False,
155
+ allow_partial: bool = False,
156
+ analysis_window: Optional[dict] = None,
157
+ ) -> AnalyzeApplicantFromStatementResponse200:
158
+ """POST /v1/underwrite/analyze/statement — multipart statement upload.
159
+
160
+ One applicant, one or more statement files (the "6 monthly PDFs"
161
+ case) → ONE consolidated analysis. ``input_mode`` is the statement
162
+ format discriminator (e.g. ``statement_camt053``, ``statement_mt940``,
163
+ ``statement_pdf`` — one format per analysis).
164
+
165
+ Hand-rolled multipart: Fastify's multipart endpoints carry no body
166
+ schema in the OpenAPI spec, so the generated layer can't drive this
167
+ endpoint. The 200 response IS in the spec and parses into the
168
+ generated model.
169
+ """
170
+ meta: dict = {"applicant_id": applicant_id, "input_mode": input_mode}
171
+ if allow_partial:
172
+ meta["allow_partial"] = True
173
+ if analysis_window is not None:
174
+ meta["analysis_window"] = analysis_window
175
+
176
+ file_list = (
177
+ [files]
178
+ if isinstance(files, (str, Path, bytes, tuple))
179
+ else list(files)
180
+ )
181
+ parts = [("file", _to_file_part(f, i)) for i, f in enumerate(file_list)]
182
+
183
+ httpx_client = self.raw.get_httpx_client()
184
+ resp = httpx_client.post(
185
+ "/v1/underwrite/analyze/statement",
186
+ params={"enrich": "true"} if enrich else None,
187
+ data={"meta": json.dumps(meta)},
188
+ files=parts,
189
+ )
190
+ if not (200 <= resp.status_code < 300):
191
+ raise DistyraError.from_response(resp.status_code, resp.content)
192
+ return AnalyzeApplicantFromStatementResponse200.from_dict(resp.json())
193
+
194
+ def get_analysis(self, analysis_id: str) -> GetUnderwritingAnalysisResponse200:
195
+ """GET /v1/underwrite/analyses/{id}."""
196
+ resp = get_underwriting_analysis.sync_detailed(client=self.raw, id=analysis_id)
197
+ return _unwrap(resp, GetUnderwritingAnalysisResponse200)
198
+
199
+ # ─── Lifecycle ─────────────────────────────────────────────────────────
200
+
201
+ def close(self) -> None:
202
+ self.raw.get_httpx_client().close()
203
+
204
+ def __enter__(self) -> "Distyra":
205
+ return self
206
+
207
+ def __exit__(self, *exc: Any) -> None:
208
+ self.close()
209
+
210
+
211
+ def _to_file_part(f: StatementFile, index: int) -> tuple:
212
+ """Normalize a StatementFile into an httpx files= tuple."""
213
+ if isinstance(f, tuple):
214
+ return f if len(f) >= 2 else (f"statement-{index}", f[0])
215
+ if isinstance(f, bytes):
216
+ return (f"statement-{index}", f)
217
+ path = Path(f)
218
+ content_type = _CONTENT_TYPES.get(path.suffix.lower(), "application/octet-stream")
219
+ return (path.name, path.read_bytes(), content_type)
@@ -0,0 +1,8 @@
1
+ """A client library for accessing Distyra Transaction Enrichment API"""
2
+
3
+ from .client import AuthenticatedClient, Client
4
+
5
+ __all__ = (
6
+ "AuthenticatedClient",
7
+ "Client",
8
+ )
@@ -0,0 +1 @@
1
+ """Contains methods for accessing the API"""
@@ -0,0 +1 @@
1
+ """Contains endpoint functions for accessing the API"""