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.
- distyra-0.1.0/.gitignore +90 -0
- distyra-0.1.0/PKG-INFO +130 -0
- distyra-0.1.0/README.md +109 -0
- distyra-0.1.0/distyra/__init__.py +34 -0
- distyra-0.1.0/distyra/client.py +219 -0
- distyra-0.1.0/distyra_api_client/__init__.py +8 -0
- distyra-0.1.0/distyra_api_client/api/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/authentication/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/authentication/rotate_api_key.py +163 -0
- distyra-0.1.0/distyra_api_client/api/catalog/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/catalog/get_categories.py +169 -0
- distyra-0.1.0/distyra_api_client/api/catalog/get_merchant.py +251 -0
- distyra-0.1.0/distyra_api_client/api/enrichment/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/enrichment/enrich_batch.py +329 -0
- distyra-0.1.0/distyra_api_client/api/enrichment/enrich_batch_async.py +268 -0
- distyra-0.1.0/distyra_api_client/api/enrichment/enrich_batch_async_status.py +232 -0
- distyra-0.1.0/distyra_api_client/api/enrichment/enrich_single.py +329 -0
- distyra-0.1.0/distyra_api_client/api/feedback/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/feedback/submit_confirmation.py +248 -0
- distyra-0.1.0/distyra_api_client/api/feedback/submit_correction.py +256 -0
- distyra-0.1.0/distyra_api_client/api/internal/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/internal/internal_crawl_mark_terminal.py +236 -0
- distyra-0.1.0/distyra_api_client/api/internal/internal_crawl_reenqueue.py +236 -0
- distyra-0.1.0/distyra_api_client/api/system/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/system/get_health.py +145 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant.py +384 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_parsed_statement.py +350 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_parsed_statement_async.py +322 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_statement.py +467 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_statement_async.py +327 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/analyze_applicant_from_statement_async_status.py +244 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/create_collection_link.py +240 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/finish_collection_analyze.py +302 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/get_collection_link.py +224 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/get_ingestion.py +244 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/get_underwriting_analysis.py +272 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/get_underwriting_analysis_report.py +331 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/ingest_statement.py +633 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/ingest_statement_batch.py +510 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/list_collection_links.py +151 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/list_ingestions.py +349 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/list_underwriting_analyses.py +313 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/revoke_collection_link.py +192 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/stage_collection_file.py +300 -0
- distyra-0.1.0/distyra_api_client/api/underwriting/submit_underwriting_feedback.py +320 -0
- distyra-0.1.0/distyra_api_client/api/webhooks/__init__.py +1 -0
- distyra-0.1.0/distyra_api_client/api/webhooks/create_webhook_endpoint.py +236 -0
- distyra-0.1.0/distyra_api_client/api/webhooks/delete_webhook_endpoint.py +188 -0
- distyra-0.1.0/distyra_api_client/api/webhooks/get_webhook_endpoint.py +212 -0
- distyra-0.1.0/distyra_api_client/api/webhooks/list_webhook_endpoints.py +139 -0
- distyra-0.1.0/distyra_api_client/api/webhooks/rotate_webhook_endpoint_secret.py +228 -0
- distyra-0.1.0/distyra_api_client/client.py +268 -0
- distyra-0.1.0/distyra_api_client/errors.py +16 -0
- distyra-0.1.0/distyra_api_client/models/__init__.py +1189 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_body.py +157 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_accounts_item.py +130 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_accounts_item_transactions_item.py +48 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_analysis_window.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_input_mode_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_input_mode_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_body_options.py +62 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body.py +144 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body_accounts_item.py +49 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body_analysis_window.py +69 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_body_source.py +60 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_202.py +106 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_202_status.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_async_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body.py +144 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body_accounts_item.py +49 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body_analysis_window.py +69 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_body_source.py +60 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200.py +177 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_analysis_window.py +70 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_engine_versions.py +104 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence.py +138 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item.py +187 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item_reconciliation.py +130 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_accounts_item_transactions_item.py +202 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_sources_item.py +91 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_evidence_warnings_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_200_features.py +52 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_402.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_409.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_parsed_statement_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_202.py +106 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_202_status.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_413.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_415.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200.py +307 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_result_type_0.py +44 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_200_status_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_async_status_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200.py +172 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_analysis_window.py +70 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_engine_versions.py +104 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence.py +132 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item.py +185 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item_reconciliation.py +130 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_accounts_item_transactions_item.py +202 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_sources_item.py +91 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_evidence_warnings_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_200_features.py +52 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_402.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_409.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_413.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_415.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_from_statement_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200.py +156 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_analysis_window.py +70 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_engine_versions.py +104 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence.py +132 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item.py +185 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item_reconciliation.py +130 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_accounts_item_transactions_item.py +202 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_sources_item.py +91 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_evidence_warnings_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_200_features.py +52 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_402.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_409.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_413.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_415.py +71 -0
- distyra-0.1.0/distyra_api_client/models/analyze_applicant_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_body.py +72 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201.py +199 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_201_status_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/create_collection_link_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body.py +145 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_body_events_item_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201.py +213 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_201_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/create_webhook_endpoint_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/delete_webhook_endpoint_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/delete_webhook_endpoint_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/delete_webhook_endpoint_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_body.py +73 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_body_items_item.py +115 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_202.py +104 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_202_status.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_402.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_response_429.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200.py +291 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_result_type_0_item.py +44 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_200_status_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_async_status_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_body.py +73 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_body_items_item.py +124 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_cache_only.py +9 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_force_refresh.py +9 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_min_confidence.py +10 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_response_200.py +81 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_response_200_results_item.py +44 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_response_402.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_batch_response_429.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_body.py +121 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_cache_only.py +9 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_force_refresh.py +9 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_min_confidence.py +10 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200.py +168 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_alternatives_item.py +67 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_availability.py +99 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_category.py +129 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_category_source_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_category_source_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_confidence.py +96 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_location.py +94 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant.py +342 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_brand_colors.py +44 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_confidence_bucket_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_confidence_bucket_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_confidence_bucket_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_merchant_source_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_200_metadata.py +127 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_402.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/enrich_single_response_429.py +71 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_body.py +59 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_202.py +94 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_202_status.py +8 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_409.py +71 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/finish_collection_analyze_response_503.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_categories_response_200.py +73 -0
- distyra-0.1.0/distyra_api_client/models/get_categories_response_200_industries_item.py +67 -0
- distyra-0.1.0/distyra_api_client/models/get_categories_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_categories_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_categories_response_429.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200.py +190 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_200_status_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_collection_link_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200.py +112 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks.py +113 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_db_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_db_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_redis_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200_checks_redis_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_200_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503.py +112 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks.py +113 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_db_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_db_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_redis_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503_checks_redis_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_health_response_503_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200.py +319 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_accounts_item.py +132 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_errors_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_200_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_ingestion_response_410.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_merchant_response_200.py +167 -0
- distyra-0.1.0/distyra_api_client/models/get_merchant_response_200_brand_colors.py +44 -0
- distyra-0.1.0/distyra_api_client/models/get_merchant_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_merchant_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_merchant_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_merchant_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_merchant_response_429.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_report_response_410.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200.py +164 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_analysis_window.py +70 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_engine_versions.py +104 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence.py +132 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item.py +185 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item_reconciliation.py +130 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_accounts_item_transactions_item.py +202 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_sources_item.py +91 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_evidence_warnings_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_200_features.py +52 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_underwriting_analysis_response_410.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200.py +204 -0
- distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_200_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/get_webhook_endpoint_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200.py +187 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item.py +338 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_accounts_item.py +134 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_errors_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_ingestions_item_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_skipped_item.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_source_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_200_source_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_0.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1.py +196 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item.py +338 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_accounts_item.py +134 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_errors_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_ingestions_item_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_skipped_item.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_source_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_402_type_1_source_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_413.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_415.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_batch_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0.py +324 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_accounts_item.py +134 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_errors_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_0_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1.py +189 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item.py +338 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_accounts_item.py +134 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_errors_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_ingestions_item_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_skipped_item.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_source_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_200_type_1_source_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_0.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1.py +189 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item.py +338 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_accounts_item.py +134 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_accounts_item_statement_period.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_errors_item.py +75 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_ingestions_item_format_type_8.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_skipped_item.py +67 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_source_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_402_type_1_source_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_413.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_415.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_422.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_501.py +71 -0
- distyra-0.1.0/distyra_api_client/models/ingest_statement_response_503.py +71 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_body.py +59 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_200.py +104 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_200_action_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_200_action_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_mark_terminal_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_body.py +59 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_200.py +99 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_200_action_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_200_action_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/internal_crawl_reenqueue_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200.py +79 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item.py +202 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_200_collection_links_item_status_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_collection_links_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_3.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_4.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_5.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_6.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_format_type_7.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_response_200.py +87 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_response_200_items_item.py +135 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_ingestions_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_200.py +92 -0
- distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_200_items_item.py +130 -0
- distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_underwriting_analyses_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200.py +75 -0
- distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item.py +211 -0
- distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_200_endpoints_item_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/list_webhook_endpoints_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/revoke_collection_link_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/revoke_collection_link_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/revoke_collection_link_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/rotate_api_key_response_200.py +85 -0
- distyra-0.1.0/distyra_api_client/models/rotate_api_key_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/rotate_api_key_response_500.py +71 -0
- distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200.py +219 -0
- distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200_status_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200_status_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_200_status_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/rotate_webhook_endpoint_secret_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_201.py +91 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_409.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_413.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_415.py +71 -0
- distyra-0.1.0/distyra_api_client/models/stage_collection_file_response_503.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_confirmation_body.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_200.py +69 -0
- distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_confirmation_response_429.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_correction_body.py +91 -0
- distyra-0.1.0/distyra_api_client/models/submit_correction_response_200.py +69 -0
- distyra-0.1.0/distyra_api_client/models/submit_correction_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_correction_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_correction_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_correction_response_429.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body.py +111 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item.py +165 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_corrected_payload.py +52 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_correction_type_type_0.py +8 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_correction_type_type_1.py +8 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_body_corrections_item_correction_type_type_2.py +8 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_200.py +98 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_400.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_401.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_403.py +71 -0
- distyra-0.1.0/distyra_api_client/models/submit_underwriting_feedback_response_404.py +71 -0
- distyra-0.1.0/distyra_api_client/py.typed +1 -0
- distyra-0.1.0/distyra_api_client/types.py +54 -0
- distyra-0.1.0/pyproject.toml +49 -0
- distyra-0.1.0/tests/test_smoke.py +183 -0
distyra-0.1.0/.gitignore
ADDED
|
@@ -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
|
+
```
|
distyra-0.1.0/README.md
ADDED
|
@@ -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 @@
|
|
|
1
|
+
"""Contains methods for accessing the API"""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains endpoint functions for accessing the API"""
|