factpulse 3.0.7__py3-none-any.whl → 3.0.23__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of factpulse might be problematic. Click here for more details.

Files changed (305) hide show
  1. factpulse/__init__.py +289 -12
  2. factpulse/api/__init__.py +2 -0
  3. factpulse/api/afnorpdppa_api.py +16 -14
  4. factpulse/api/afnorpdppa_directory_service_api.py +1224 -309
  5. factpulse/api/afnorpdppa_flow_service_api.py +199 -68
  6. factpulse/api/chorus_pro_api.py +61 -8
  7. factpulse/api/document_conversion_api.py +54 -338
  8. factpulse/api/downloads_api.py +1171 -0
  9. factpulse/api/e_reporting_api.py +3254 -0
  10. factpulse/api/health_api.py +8 -1
  11. factpulse/api/invoice_processing_api.py +234 -37
  12. factpulse/api/pdfxml_verification_api.py +98 -19
  13. factpulse/api/user_api.py +5 -1
  14. factpulse/api_client.py +3 -2
  15. factpulse/configuration.py +10 -5
  16. factpulse/exceptions.py +2 -1
  17. factpulse/models/__init__.py +143 -6
  18. factpulse/models/accept_language.py +38 -0
  19. factpulse/models/acknowledgment_status.py +2 -1
  20. factpulse/models/additional_document.py +2 -1
  21. factpulse/models/afnor_acknowledgement.py +100 -0
  22. factpulse/models/afnor_acknowledgement_detail.py +105 -0
  23. factpulse/models/afnor_address_edit.py +111 -0
  24. factpulse/models/afnor_address_patch.py +141 -0
  25. factpulse/models/afnor_address_put.py +129 -0
  26. factpulse/models/afnor_address_read.py +113 -0
  27. factpulse/models/afnor_algorithm.py +41 -0
  28. factpulse/models/afnor_contains_operator.py +37 -0
  29. factpulse/models/afnor_create_directory_line_body.py +98 -0
  30. factpulse/models/afnor_create_directory_line_body_addressing_information.py +122 -0
  31. factpulse/models/afnor_create_directory_line_body_period.py +91 -0
  32. factpulse/models/afnor_create_routing_code_body.py +153 -0
  33. factpulse/models/afnor_credentials.py +2 -1
  34. factpulse/models/afnor_destination.py +15 -15
  35. factpulse/models/afnor_diffusion_status.py +38 -0
  36. factpulse/models/afnor_directory_line_field.py +42 -0
  37. factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code.py +139 -0
  38. factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code_platform.py +92 -0
  39. factpulse/models/afnor_directory_line_payload_history_legal_unit_facility_routing_code_routing_code.py +134 -0
  40. factpulse/models/afnor_directory_line_post201_response.py +94 -0
  41. factpulse/models/afnor_directory_line_search_post200_response.py +104 -0
  42. factpulse/models/afnor_entity_type.py +38 -0
  43. factpulse/models/afnor_error.py +97 -0
  44. factpulse/models/afnor_facility_administrative_status.py +38 -0
  45. factpulse/models/afnor_facility_nature.py +38 -0
  46. factpulse/models/afnor_facility_payload_history.py +140 -0
  47. factpulse/models/afnor_facility_payload_history_ule_b2g_additional_data.py +98 -0
  48. factpulse/models/afnor_facility_payload_included.py +134 -0
  49. factpulse/models/afnor_facility_type.py +38 -0
  50. factpulse/models/afnor_flow.py +129 -0
  51. factpulse/models/afnor_flow_ack_status.py +39 -0
  52. factpulse/models/afnor_flow_direction.py +38 -0
  53. factpulse/models/afnor_flow_info.py +112 -0
  54. factpulse/models/afnor_flow_profile.py +39 -0
  55. factpulse/models/afnor_flow_syntax.py +41 -0
  56. factpulse/models/afnor_flow_type.py +49 -0
  57. factpulse/models/afnor_full_flow_info.py +117 -0
  58. factpulse/models/afnor_health_check_response.py +2 -1
  59. factpulse/models/afnor_legal_unit_administrative_status.py +38 -0
  60. factpulse/models/afnor_legal_unit_payload_history.py +107 -0
  61. factpulse/models/afnor_legal_unit_payload_included.py +107 -0
  62. factpulse/models/afnor_legal_unit_payload_included_no_siren.py +95 -0
  63. factpulse/models/afnor_platform_status.py +38 -0
  64. factpulse/models/afnor_processing_rule.py +42 -0
  65. factpulse/models/afnor_reason_code.py +141 -0
  66. factpulse/models/afnor_reason_code_enum.py +51 -0
  67. factpulse/models/afnor_recipient_platform_type.py +38 -0
  68. factpulse/models/afnor_result.py +25 -3
  69. factpulse/models/afnor_routing_code_administrative_status.py +38 -0
  70. factpulse/models/afnor_routing_code_field.py +44 -0
  71. factpulse/models/afnor_routing_code_payload_history_legal_unit_facility.py +158 -0
  72. factpulse/models/afnor_routing_code_post201_response.py +113 -0
  73. factpulse/models/afnor_routing_code_search.py +122 -0
  74. factpulse/models/afnor_routing_code_search_filters.py +128 -0
  75. factpulse/models/afnor_routing_code_search_filters_administrative_status.py +92 -0
  76. factpulse/models/afnor_routing_code_search_filters_routing_code_name.py +102 -0
  77. factpulse/models/afnor_routing_code_search_filters_routing_identifier.py +102 -0
  78. factpulse/models/afnor_routing_code_search_post200_response.py +104 -0
  79. factpulse/models/afnor_routing_code_search_sorting_inner.py +92 -0
  80. factpulse/models/afnor_search_directory_line.py +109 -0
  81. factpulse/models/afnor_search_directory_line_filters.py +116 -0
  82. factpulse/models/afnor_search_directory_line_filters_addressing_identifier.py +92 -0
  83. factpulse/models/afnor_search_directory_line_filters_addressing_suffix.py +92 -0
  84. factpulse/models/afnor_search_directory_line_sorting_inner.py +92 -0
  85. factpulse/models/afnor_search_flow_content.py +104 -0
  86. factpulse/models/afnor_search_flow_filters.py +106 -0
  87. factpulse/models/afnor_search_flow_params.py +95 -0
  88. factpulse/models/afnor_search_siren.py +109 -0
  89. factpulse/models/afnor_search_siren_filters.py +110 -0
  90. factpulse/models/afnor_search_siren_filters_administrative_status.py +92 -0
  91. factpulse/models/afnor_search_siren_filters_business_name.py +92 -0
  92. factpulse/models/afnor_search_siren_filters_entity_type.py +92 -0
  93. factpulse/models/afnor_search_siren_filters_siren.py +102 -0
  94. factpulse/models/afnor_search_siren_sorting_inner.py +92 -0
  95. factpulse/models/afnor_search_siret.py +122 -0
  96. factpulse/models/afnor_search_siret_filters.py +140 -0
  97. factpulse/models/afnor_search_siret_filters_address_lines.py +92 -0
  98. factpulse/models/afnor_search_siret_filters_administrative_status.py +92 -0
  99. factpulse/models/afnor_search_siret_filters_country_subdivision.py +92 -0
  100. factpulse/models/afnor_search_siret_filters_facility_type.py +92 -0
  101. factpulse/models/afnor_search_siret_filters_locality.py +92 -0
  102. factpulse/models/afnor_search_siret_filters_name.py +92 -0
  103. factpulse/models/afnor_search_siret_filters_postal_code.py +102 -0
  104. factpulse/models/afnor_search_siret_filters_siret.py +102 -0
  105. factpulse/models/afnor_search_siret_sorting_inner.py +92 -0
  106. factpulse/models/afnor_siren_field.py +41 -0
  107. factpulse/models/afnor_siren_search_post200_response.py +104 -0
  108. factpulse/models/afnor_siret_field.py +50 -0
  109. factpulse/models/afnor_siret_search_post200_response.py +104 -0
  110. factpulse/models/afnor_sorting_order.py +38 -0
  111. factpulse/models/afnor_strict_operator.py +37 -0
  112. factpulse/models/afnor_update_patch_directory_line_body.py +89 -0
  113. factpulse/models/afnor_update_patch_routing_code_body.py +120 -0
  114. factpulse/models/afnor_update_put_routing_code_body.py +114 -0
  115. factpulse/models/afnor_webhook_callback_content.py +92 -0
  116. factpulse/models/aggregated_payment_input.py +106 -0
  117. factpulse/models/aggregated_transaction_input.py +136 -0
  118. factpulse/models/allowance_charge.py +9 -6
  119. factpulse/models/allowance_charge_reason_code.py +74 -0
  120. factpulse/models/allowance_reason_code.py +2 -1
  121. factpulse/models/allowance_total_amount.py +2 -1
  122. factpulse/models/amount.py +3 -2
  123. factpulse/models/amount1.py +140 -0
  124. factpulse/models/amount_due.py +2 -1
  125. factpulse/models/api_error.py +2 -1
  126. factpulse/models/api_profile.py +41 -0
  127. factpulse/models/async_task_status.py +2 -1
  128. factpulse/models/base_amount.py +2 -1
  129. factpulse/models/bounding_box_schema.py +2 -1
  130. factpulse/models/buyercountry.py +137 -0
  131. factpulse/models/celery_status.py +2 -1
  132. factpulse/models/certificate_info_response.py +2 -1
  133. factpulse/models/charge_total_amount.py +2 -1
  134. factpulse/models/{facture_electronique_rest_api_schemas_chorus_pro_chorus_pro_credentials.py → chorus_pro_credentials.py} +5 -4
  135. factpulse/models/chorus_pro_destination.py +2 -1
  136. factpulse/models/chorus_pro_result.py +2 -1
  137. factpulse/models/contact.py +2 -1
  138. factpulse/models/convert_resume_request.py +2 -1
  139. factpulse/models/convert_success_response.py +2 -1
  140. factpulse/models/convert_validation_failed_response.py +7 -6
  141. factpulse/models/country_code.py +206 -0
  142. factpulse/models/create_aggregated_report_request.py +170 -0
  143. factpulse/models/create_e_reporting_request.py +173 -0
  144. factpulse/models/currency.py +137 -0
  145. factpulse/models/currency_code.py +89 -0
  146. factpulse/models/delivery_party.py +2 -1
  147. factpulse/models/destination.py +2 -1
  148. factpulse/models/directory_line_include.py +40 -0
  149. factpulse/models/doc_type.py +40 -0
  150. factpulse/models/document_type_info.py +2 -1
  151. factpulse/models/e_reporting_flow_type.py +40 -0
  152. factpulse/models/{convert_error_response.py → e_reporting_validation_error.py} +15 -23
  153. factpulse/models/electronic_address.py +4 -3
  154. factpulse/models/enriched_invoice_info.py +8 -7
  155. factpulse/models/error_level.py +2 -1
  156. factpulse/models/error_source.py +2 -1
  157. factpulse/models/extraction_info.py +2 -1
  158. factpulse/models/factur_x_invoice.py +2 -1
  159. factpulse/models/factur_xpdf_info.py +2 -1
  160. factpulse/models/facture_electronique_rest_api_schemas_ereporting_invoice_type_code.py +41 -0
  161. factpulse/models/facture_electronique_rest_api_schemas_processing_chorus_pro_credentials.py +2 -1
  162. factpulse/models/field_status.py +2 -1
  163. factpulse/models/file_info.py +2 -1
  164. factpulse/models/files_info.py +2 -1
  165. factpulse/models/flow_direction.py +2 -1
  166. factpulse/models/flow_profile.py +2 -1
  167. factpulse/models/flow_summary.py +5 -4
  168. factpulse/models/flow_syntax.py +2 -1
  169. factpulse/models/flow_type.py +12 -3
  170. factpulse/models/generate_aggregated_report_response.py +100 -0
  171. factpulse/models/generate_certificate_request.py +2 -1
  172. factpulse/models/generate_certificate_response.py +2 -1
  173. factpulse/models/generate_e_reporting_response.py +96 -0
  174. factpulse/models/get_chorus_pro_id_request.py +5 -4
  175. factpulse/models/get_chorus_pro_id_response.py +2 -1
  176. factpulse/models/get_invoice_request.py +5 -4
  177. factpulse/models/get_invoice_response.py +4 -3
  178. factpulse/models/get_structure_request.py +5 -4
  179. factpulse/models/get_structure_response.py +4 -3
  180. factpulse/models/global_allowance_amount.py +2 -1
  181. factpulse/models/gross_unit_price.py +2 -1
  182. factpulse/models/http_validation_error.py +2 -1
  183. factpulse/models/incoming_invoice.py +8 -29
  184. factpulse/models/incoming_supplier.py +2 -1
  185. factpulse/models/invoice_format.py +2 -1
  186. factpulse/models/invoice_input.py +179 -0
  187. factpulse/models/invoice_line.py +18 -2
  188. factpulse/models/invoice_line_allowance_amount.py +2 -1
  189. factpulse/models/invoice_note.py +4 -3
  190. factpulse/models/invoice_payment_input.py +110 -0
  191. factpulse/models/invoice_references.py +2 -1
  192. factpulse/models/invoice_status.py +2 -1
  193. factpulse/models/invoice_totals.py +2 -1
  194. factpulse/models/invoice_totals_prepayment.py +2 -1
  195. factpulse/models/invoice_type_code.py +2 -1
  196. factpulse/models/invoice_type_code_output.py +52 -0
  197. factpulse/models/invoicing_framework.py +4 -3
  198. factpulse/models/invoicing_framework_code.py +2 -1
  199. factpulse/models/line_net_amount.py +2 -1
  200. factpulse/models/line_sub_type.py +39 -0
  201. factpulse/models/line_total_amount.py +2 -1
  202. factpulse/models/{validation_error_loc_inner.py → location_inner.py} +8 -7
  203. factpulse/models/mandatory_note_schema.py +2 -1
  204. factpulse/models/manual_rate.py +2 -1
  205. factpulse/models/manual_vat_rate.py +2 -1
  206. factpulse/models/missing_field.py +2 -1
  207. factpulse/models/operation_nature.py +2 -1
  208. factpulse/models/output_format.py +2 -1
  209. factpulse/models/page_dimensions_schema.py +2 -1
  210. factpulse/models/payee.py +2 -1
  211. factpulse/models/payment_amount_by_rate.py +98 -0
  212. factpulse/models/payment_card.py +2 -1
  213. factpulse/models/payment_means.py +2 -1
  214. factpulse/models/pdf_validation_result_api.py +2 -1
  215. factpulse/models/pdp_credentials.py +2 -1
  216. factpulse/models/percentage.py +2 -1
  217. factpulse/models/postal_address.py +2 -1
  218. factpulse/models/price_allowance_amount.py +2 -1
  219. factpulse/models/price_basis_quantity.py +2 -1
  220. factpulse/models/processing_options.py +4 -3
  221. factpulse/models/processing_rule.py +42 -0
  222. factpulse/models/product_characteristic.py +2 -1
  223. factpulse/models/product_classification.py +2 -1
  224. factpulse/models/quantity.py +2 -1
  225. factpulse/models/rate.py +140 -0
  226. factpulse/models/rate1.py +140 -0
  227. factpulse/models/recipient.py +2 -1
  228. factpulse/models/report_period.py +91 -0
  229. factpulse/models/report_sender.py +98 -0
  230. factpulse/models/rounding_amount.py +2 -1
  231. factpulse/models/routing_code_include.py +38 -0
  232. factpulse/models/schematron_validation_error.py +128 -0
  233. factpulse/models/scheme_id.py +9 -1
  234. factpulse/models/search_flow_request.py +2 -1
  235. factpulse/models/search_flow_response.py +2 -1
  236. factpulse/models/search_services_response.py +5 -4
  237. factpulse/models/search_structure_request.py +5 -4
  238. factpulse/models/search_structure_response.py +2 -1
  239. factpulse/models/sellercountry.py +137 -0
  240. factpulse/models/signature_info.py +2 -1
  241. factpulse/models/signature_info_api.py +2 -1
  242. factpulse/models/signature_parameters.py +2 -1
  243. factpulse/models/simplified_invoice_data.py +30 -3
  244. factpulse/models/siret_include.py +37 -0
  245. factpulse/models/structure_info.py +2 -1
  246. factpulse/models/structure_parameters.py +2 -1
  247. factpulse/models/structure_service.py +2 -1
  248. factpulse/models/submission_mode.py +2 -1
  249. factpulse/models/submit_aggregated_report_request.py +127 -0
  250. factpulse/models/submit_complete_invoice_request.py +2 -1
  251. factpulse/models/submit_complete_invoice_response.py +2 -1
  252. factpulse/models/submit_e_reporting_request.py +127 -0
  253. factpulse/models/submit_e_reporting_response.py +117 -0
  254. factpulse/models/submit_flow_request.py +2 -1
  255. factpulse/models/submit_flow_response.py +2 -1
  256. factpulse/models/submit_gross_amount.py +2 -1
  257. factpulse/models/submit_invoice_request.py +5 -4
  258. factpulse/models/submit_invoice_response.py +2 -1
  259. factpulse/models/submit_net_amount.py +2 -1
  260. factpulse/models/submit_vat_amount.py +2 -1
  261. factpulse/models/supplementary_attachment.py +7 -6
  262. factpulse/models/supplier.py +2 -1
  263. factpulse/models/task_response.py +2 -1
  264. factpulse/models/tax_breakdown_input.py +104 -0
  265. factpulse/models/tax_due_date_type.py +42 -0
  266. factpulse/models/tax_representative.py +2 -1
  267. factpulse/models/taxable_amount.py +2 -1
  268. factpulse/models/taxableamount.py +140 -0
  269. factpulse/models/taxamount.py +140 -0
  270. factpulse/models/taxamount1.py +140 -0
  271. factpulse/models/taxamount2.py +140 -0
  272. factpulse/models/taxexclusiveamount.py +140 -0
  273. factpulse/models/taxexclusiveamount1.py +140 -0
  274. factpulse/models/total_gross_amount.py +2 -1
  275. factpulse/models/total_net_amount.py +2 -1
  276. factpulse/models/total_vat_amount.py +2 -1
  277. factpulse/models/transaction_category.py +40 -0
  278. factpulse/models/transmission_type_code.py +38 -0
  279. factpulse/models/unit_net_price.py +2 -1
  280. factpulse/models/unit_of_measure.py +2 -1
  281. factpulse/models/validate_e_reporting_request.py +92 -0
  282. factpulse/models/validate_e_reporting_response.py +113 -0
  283. factpulse/models/validation_error.py +5 -4
  284. factpulse/models/validation_error_detail.py +2 -1
  285. factpulse/models/validation_error_response.py +2 -1
  286. factpulse/models/validation_info.py +5 -4
  287. factpulse/models/validation_success_response.py +2 -1
  288. factpulse/models/vat_accounting_code.py +2 -1
  289. factpulse/models/vat_amount.py +2 -1
  290. factpulse/models/vat_category.py +2 -1
  291. factpulse/models/vat_line.py +2 -1
  292. factpulse/models/vat_point_date_code.py +2 -1
  293. factpulse/models/vat_rate.py +2 -1
  294. factpulse/models/verification_success_response.py +2 -1
  295. factpulse/models/verified_field_schema.py +2 -1
  296. factpulse/rest.py +2 -1
  297. {factpulse-3.0.7.dist-info → factpulse-3.0.23.dist-info}/METADATA +42 -40
  298. factpulse-3.0.23.dist-info/RECORD +306 -0
  299. {factpulse-3.0.7.dist-info → factpulse-3.0.23.dist-info}/licenses/LICENSE +1 -1
  300. factpulse_helpers/client.py +2 -1
  301. factpulse/models/convert_pending_input_response.py +0 -114
  302. factpulse/models/factur_x_profile.py +0 -39
  303. factpulse-3.0.7.dist-info/RECORD +0 -168
  304. {factpulse-3.0.7.dist-info → factpulse-3.0.23.dist-info}/WHEEL +0 -0
  305. {factpulse-3.0.7.dist-info → factpulse-3.0.23.dist-info}/top_level.txt +0 -0
@@ -3,9 +3,10 @@
3
3
  """
4
4
  FactPulse REST API
5
5
 
6
- REST API for electronic invoicing in France: Factur-X, AFNOR PDP/PA, electronic signatures. ## 🎯 Main Features ### 📄 Factur-X Invoice Generation - **Formats**: XML only or PDF/A-3 with embedded XML - **Profiles**: MINIMUM, BASIC, EN16931, EXTENDED - **Standards**: EN 16931 (EU directive 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Simplified Format**: Generation from SIRET + auto-enrichment (Chorus Pro API + Business Search) ### ✅ Validation and Compliance - **XML Validation**: Schematron (45 to 210+ rules depending on profile) - **PDF Validation**: PDF/A-3, Factur-X XMP metadata, electronic signatures - **VeraPDF**: Strict PDF/A validation (146+ ISO 19005-3 rules) - **Asynchronous Processing**: Celery support for heavy validations (VeraPDF) ### 📡 AFNOR PDP/PA Integration (XP Z12-013) - **Flow Submission**: Send invoices to Partner Dematerialization Platforms - **Flow Search**: View submitted invoices - **Download**: Retrieve PDF/A-3 with XML - **Directory Service**: Company search (SIREN/SIRET) - **Multi-client**: Support for multiple PDP configs per user (stored credentials or zero-storage) ### ✍️ PDF Electronic Signature - **Standards**: PAdES-B-B, PAdES-B-T (RFC 3161 timestamping), PAdES-B-LT (long-term archival) - **eIDAS Levels**: SES (self-signed), AdES (commercial CA), QES (QTSP) - **Validation**: Cryptographic integrity and certificate verification - **Certificate Generation**: Self-signed X.509 certificates for testing ### 🔄 Asynchronous Processing - **Celery**: Asynchronous generation, validation and signing - **Polling**: Status tracking via `/tasks/{task_id}/status` - **No timeout**: Ideal for large files or heavy validations ## 🔒 Authentication All requests require a **JWT token** in the Authorization header: ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### How to obtain a JWT token? #### 🔑 Method 1: `/api/token/` API (Recommended) **URL:** `https://www.factpulse.fr/api/token/` This method is **recommended** for integration in your applications and CI/CD workflows. **Prerequisites:** Having set a password on your account **For users registered via email/password:** - You already have a password, use it directly **For users registered via OAuth (Google/GitHub):** - You must first set a password at: https://www.factpulse.fr/accounts/password/set/ - Once the password is created, you can use the API **Request example:** ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\" }' ``` **Optional `client_uid` parameter:** To select credentials for a specific client (PA/PDP, Chorus Pro, signing certificates), add `client_uid`: ```bash curl -X POST https://www.factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` The `client_uid` will be included in the JWT and allow the API to automatically use: - AFNOR/PDP credentials configured for this client - Chorus Pro credentials configured for this client - Electronic signature certificates configured for this client **Response:** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Access token (validity: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Refresh token (validity: 7 days) } ``` **Advantages:** - ✅ Full automation (CI/CD, scripts) - ✅ Programmatic token management - ✅ Refresh token support for automatic access renewal - ✅ Easy integration in any language/tool #### 🖥️ Method 2: Dashboard Generation (Alternative) **URL:** https://www.factpulse.fr/dashboard/ This method is suitable for quick tests or occasional use via the graphical interface. **How it works:** - Log in to the dashboard - Use the \"Generate Test Token\" or \"Generate Production Token\" buttons - Works for **all** users (OAuth and email/password), without requiring a password **Token types:** - **Test Token**: 24h validity, 1000 calls/day quota (free) - **Production Token**: 7 days validity, quota based on your plan **Advantages:** - ✅ Quick for API testing - ✅ No password required - ✅ Simple visual interface **Disadvantages:** - ❌ Requires manual action - ❌ No refresh token - ❌ Less suited for automation ### 📚 Full Documentation For more information on authentication and API usage: https://www.factpulse.fr/documentation-api/
6
+ REST API for electronic invoicing in France: Factur-X, AFNOR PDP/PA, electronic signatures. ## 🎯 Main Features ### 📄 Factur-X Invoice Generation - **Formats**: XML only or PDF/A-3 with embedded XML - **Profiles**: MINIMUM, BASIC, EN16931, EXTENDED - **Standards**: EN 16931 (EU directive 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT) - **🆕 Simplified Format**: Generation from SIRET + auto-enrichment (Chorus Pro API + Business Search) ### ✅ Validation and Compliance - **XML Validation**: Schematron (45 to 210+ rules depending on profile) - **PDF Validation**: PDF/A-3, Factur-X XMP metadata, electronic signatures - **VeraPDF**: Strict PDF/A validation (146+ ISO 19005-3 rules) - **Asynchronous Processing**: Celery support for heavy validations (VeraPDF) ### 📡 AFNOR PDP/PA Integration (XP Z12-013) - **Flow Submission**: Send invoices to Partner Dematerialization Platforms - **Flow Search**: View submitted invoices - **Download**: Retrieve PDF/A-3 with XML - **Directory Service**: Company search (SIREN/SIRET) - **Multi-client**: Support for multiple PDP configs per user (stored credentials or zero-storage) ### ✍️ PDF Electronic Signature - **Standards**: PAdES-B-B, PAdES-B-T (RFC 3161 timestamping), PAdES-B-LT (long-term archival) - **eIDAS Levels**: SES (self-signed), AdES (commercial CA), QES (QTSP) - **Validation**: Cryptographic integrity and certificate verification - **Certificate Generation**: Self-signed X.509 certificates for testing ### 🔄 Asynchronous Processing - **Celery**: Asynchronous generation, validation and signing - **Polling**: Status tracking via `/tasks/{task_id}/status` - **No timeout**: Ideal for large files or heavy validations ## 🔒 Authentication All requests require a **JWT token** in the Authorization header: ``` Authorization: Bearer YOUR_JWT_TOKEN ``` ### How to obtain a JWT token? #### 🔑 Method 1: `/api/token/` API (Recommended) **URL:** `https://factpulse.fr/api/token/` This method is **recommended** for integration in your applications and CI/CD workflows. **Prerequisites:** Having set a password on your account **For users registered via email/password:** - You already have a password, use it directly **For users registered via OAuth (Google/GitHub):** - You must first set a password at: https://factpulse.fr/accounts/password/set/ - Once the password is created, you can use the API **Request example:** ```bash curl -X POST https://factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\" }' ``` **Optional `client_uid` parameter:** To select credentials for a specific client (PA/PDP, Chorus Pro, signing certificates), add `client_uid`: ```bash curl -X POST https://factpulse.fr/api/token/ \\ -H \"Content-Type: application/json\" \\ -d '{ \"username\": \"your_email@example.com\", \"password\": \"your_password\", \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\" }' ``` The `client_uid` will be included in the JWT and allow the API to automatically use: - AFNOR/PDP credentials configured for this client - Chorus Pro credentials configured for this client - Electronic signature certificates configured for this client **Response:** ```json { \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\", // Access token (validity: 30 min) \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\" // Refresh token (validity: 7 days) } ``` **Advantages:** - ✅ Full automation (CI/CD, scripts) - ✅ Programmatic token management - ✅ Refresh token support for automatic access renewal - ✅ Easy integration in any language/tool #### 🖥️ Method 2: Dashboard Generation (Alternative) **URL:** https://factpulse.fr/api/dashboard/ This method is suitable for quick tests or occasional use via the graphical interface. **How it works:** - Log in to the dashboard - Use the \"Generate Test Token\" or \"Generate Production Token\" buttons - Works for **all** users (OAuth and email/password), without requiring a password **Token types:** - **Test Token**: 24h validity, 1000 calls/day quota (free) - **Production Token**: 7 days validity, quota based on your plan **Advantages:** - ✅ Quick for API testing - ✅ No password required - ✅ Simple visual interface **Disadvantages:** - ❌ Requires manual action - ❌ No refresh token - ❌ Less suited for automation ### 📚 Full Documentation For more information on authentication and API usage: https://factpulse.fr/documentation-api/
7
7
 
8
8
  The version of the OpenAPI document: 1.0.0
9
+ Contact: contact@factpulse.fr
9
10
  Generated by OpenAPI Generator (https://openapi-generator.tech)
10
11
 
11
12
  Do not edit the class manually.
@@ -16,8 +17,9 @@ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
16
17
  from typing import Any, Dict, List, Optional, Tuple, Union
17
18
  from typing_extensions import Annotated
18
19
 
19
- from pydantic import StrictInt
20
+ from pydantic import Field, StrictInt
20
21
  from typing import Any, Dict
22
+ from typing_extensions import Annotated
21
23
  from factpulse.models.get_chorus_pro_id_request import GetChorusProIdRequest
22
24
  from factpulse.models.get_chorus_pro_id_response import GetChorusProIdResponse
23
25
  from factpulse.models.get_invoice_request import GetInvoiceRequest
@@ -104,6 +106,7 @@ class ChorusProApi:
104
106
  _response_types_map: Dict[str, Optional[str]] = {
105
107
  '200': "object",
106
108
  '422': "HTTPValidationError",
109
+ '401': "APIError",
107
110
  }
108
111
  response_data = self.api_client.call_api(
109
112
  *_param,
@@ -172,6 +175,7 @@ class ChorusProApi:
172
175
  _response_types_map: Dict[str, Optional[str]] = {
173
176
  '200': "object",
174
177
  '422': "HTTPValidationError",
178
+ '401': "APIError",
175
179
  }
176
180
  response_data = self.api_client.call_api(
177
181
  *_param,
@@ -240,6 +244,7 @@ class ChorusProApi:
240
244
  _response_types_map: Dict[str, Optional[str]] = {
241
245
  '200': "object",
242
246
  '422': "HTTPValidationError",
247
+ '401': "APIError",
243
248
  }
244
249
  response_data = self.api_client.call_api(
245
250
  *_param,
@@ -381,6 +386,7 @@ class ChorusProApi:
381
386
  _response_types_map: Dict[str, Optional[str]] = {
382
387
  '200': "object",
383
388
  '422': "HTTPValidationError",
389
+ '401': "APIError",
384
390
  }
385
391
  response_data = self.api_client.call_api(
386
392
  *_param,
@@ -449,6 +455,7 @@ class ChorusProApi:
449
455
  _response_types_map: Dict[str, Optional[str]] = {
450
456
  '200': "object",
451
457
  '422': "HTTPValidationError",
458
+ '401': "APIError",
452
459
  }
453
460
  response_data = self.api_client.call_api(
454
461
  *_param,
@@ -517,6 +524,7 @@ class ChorusProApi:
517
524
  _response_types_map: Dict[str, Optional[str]] = {
518
525
  '200': "object",
519
526
  '422': "HTTPValidationError",
527
+ '401': "APIError",
520
528
  }
521
529
  response_data = self.api_client.call_api(
522
530
  *_param,
@@ -658,6 +666,7 @@ class ChorusProApi:
658
666
  _response_types_map: Dict[str, Optional[str]] = {
659
667
  '200': "GetInvoiceResponse",
660
668
  '422': "HTTPValidationError",
669
+ '401': "APIError",
661
670
  }
662
671
  response_data = self.api_client.call_api(
663
672
  *_param,
@@ -726,6 +735,7 @@ class ChorusProApi:
726
735
  _response_types_map: Dict[str, Optional[str]] = {
727
736
  '200': "GetInvoiceResponse",
728
737
  '422': "HTTPValidationError",
738
+ '401': "APIError",
729
739
  }
730
740
  response_data = self.api_client.call_api(
731
741
  *_param,
@@ -794,6 +804,7 @@ class ChorusProApi:
794
804
  _response_types_map: Dict[str, Optional[str]] = {
795
805
  '200': "GetInvoiceResponse",
796
806
  '422': "HTTPValidationError",
807
+ '401': "APIError",
797
808
  }
798
809
  response_data = self.api_client.call_api(
799
810
  *_param,
@@ -935,6 +946,7 @@ class ChorusProApi:
935
946
  _response_types_map: Dict[str, Optional[str]] = {
936
947
  '200': "GetStructureResponse",
937
948
  '422': "HTTPValidationError",
949
+ '401': "APIError",
938
950
  }
939
951
  response_data = self.api_client.call_api(
940
952
  *_param,
@@ -1003,6 +1015,7 @@ class ChorusProApi:
1003
1015
  _response_types_map: Dict[str, Optional[str]] = {
1004
1016
  '200': "GetStructureResponse",
1005
1017
  '422': "HTTPValidationError",
1018
+ '401': "APIError",
1006
1019
  }
1007
1020
  response_data = self.api_client.call_api(
1008
1021
  *_param,
@@ -1071,6 +1084,7 @@ class ChorusProApi:
1071
1084
  _response_types_map: Dict[str, Optional[str]] = {
1072
1085
  '200': "GetStructureResponse",
1073
1086
  '422': "HTTPValidationError",
1087
+ '401': "APIError",
1074
1088
  }
1075
1089
  response_data = self.api_client.call_api(
1076
1090
  *_param,
@@ -1159,7 +1173,7 @@ class ChorusProApi:
1159
1173
  @validate_call
1160
1174
  def lister_services_structure_api_v1_chorus_pro_structures_id_structure_cpp_services_get(
1161
1175
  self,
1162
- id_structure_cpp: StrictInt,
1176
+ id_structure_cpp: Annotated[StrictInt, Field(description="Chorus Pro structure ID (idStructureCPP)")],
1163
1177
  _request_timeout: Union[
1164
1178
  None,
1165
1179
  Annotated[StrictFloat, Field(gt=0)],
@@ -1177,7 +1191,7 @@ class ChorusProApi:
1177
1191
 
1178
1192
  Retrieves the list of active services for a public structure. **Use cases**: - List available services for an administration - Verify that a service code exists before submitting an invoice **Returns**: - List of services with their code, label, and status (active/inactive)
1179
1193
 
1180
- :param id_structure_cpp: (required)
1194
+ :param id_structure_cpp: Chorus Pro structure ID (idStructureCPP) (required)
1181
1195
  :type id_structure_cpp: int
1182
1196
  :param _request_timeout: timeout setting for this request. If one
1183
1197
  number provided, it will be total request
@@ -1212,6 +1226,7 @@ class ChorusProApi:
1212
1226
  _response_types_map: Dict[str, Optional[str]] = {
1213
1227
  '200': "SearchServicesResponse",
1214
1228
  '422': "HTTPValidationError",
1229
+ '401': "APIError",
1215
1230
  }
1216
1231
  response_data = self.api_client.call_api(
1217
1232
  *_param,
@@ -1227,7 +1242,7 @@ class ChorusProApi:
1227
1242
  @validate_call
1228
1243
  def lister_services_structure_api_v1_chorus_pro_structures_id_structure_cpp_services_get_with_http_info(
1229
1244
  self,
1230
- id_structure_cpp: StrictInt,
1245
+ id_structure_cpp: Annotated[StrictInt, Field(description="Chorus Pro structure ID (idStructureCPP)")],
1231
1246
  _request_timeout: Union[
1232
1247
  None,
1233
1248
  Annotated[StrictFloat, Field(gt=0)],
@@ -1245,7 +1260,7 @@ class ChorusProApi:
1245
1260
 
1246
1261
  Retrieves the list of active services for a public structure. **Use cases**: - List available services for an administration - Verify that a service code exists before submitting an invoice **Returns**: - List of services with their code, label, and status (active/inactive)
1247
1262
 
1248
- :param id_structure_cpp: (required)
1263
+ :param id_structure_cpp: Chorus Pro structure ID (idStructureCPP) (required)
1249
1264
  :type id_structure_cpp: int
1250
1265
  :param _request_timeout: timeout setting for this request. If one
1251
1266
  number provided, it will be total request
@@ -1280,6 +1295,7 @@ class ChorusProApi:
1280
1295
  _response_types_map: Dict[str, Optional[str]] = {
1281
1296
  '200': "SearchServicesResponse",
1282
1297
  '422': "HTTPValidationError",
1298
+ '401': "APIError",
1283
1299
  }
1284
1300
  response_data = self.api_client.call_api(
1285
1301
  *_param,
@@ -1295,7 +1311,7 @@ class ChorusProApi:
1295
1311
  @validate_call
1296
1312
  def lister_services_structure_api_v1_chorus_pro_structures_id_structure_cpp_services_get_without_preload_content(
1297
1313
  self,
1298
- id_structure_cpp: StrictInt,
1314
+ id_structure_cpp: Annotated[StrictInt, Field(description="Chorus Pro structure ID (idStructureCPP)")],
1299
1315
  _request_timeout: Union[
1300
1316
  None,
1301
1317
  Annotated[StrictFloat, Field(gt=0)],
@@ -1313,7 +1329,7 @@ class ChorusProApi:
1313
1329
 
1314
1330
  Retrieves the list of active services for a public structure. **Use cases**: - List available services for an administration - Verify that a service code exists before submitting an invoice **Returns**: - List of services with their code, label, and status (active/inactive)
1315
1331
 
1316
- :param id_structure_cpp: (required)
1332
+ :param id_structure_cpp: Chorus Pro structure ID (idStructureCPP) (required)
1317
1333
  :type id_structure_cpp: int
1318
1334
  :param _request_timeout: timeout setting for this request. If one
1319
1335
  number provided, it will be total request
@@ -1348,6 +1364,7 @@ class ChorusProApi:
1348
1364
  _response_types_map: Dict[str, Optional[str]] = {
1349
1365
  '200': "SearchServicesResponse",
1350
1366
  '422': "HTTPValidationError",
1367
+ '401': "APIError",
1351
1368
  }
1352
1369
  response_data = self.api_client.call_api(
1353
1370
  *_param,
@@ -1476,6 +1493,7 @@ class ChorusProApi:
1476
1493
  _response_types_map: Dict[str, Optional[str]] = {
1477
1494
  '200': "GetChorusProIdResponse",
1478
1495
  '422': "HTTPValidationError",
1496
+ '401': "APIError",
1479
1497
  }
1480
1498
  response_data = self.api_client.call_api(
1481
1499
  *_param,
@@ -1544,6 +1562,7 @@ class ChorusProApi:
1544
1562
  _response_types_map: Dict[str, Optional[str]] = {
1545
1563
  '200': "GetChorusProIdResponse",
1546
1564
  '422': "HTTPValidationError",
1565
+ '401': "APIError",
1547
1566
  }
1548
1567
  response_data = self.api_client.call_api(
1549
1568
  *_param,
@@ -1612,6 +1631,7 @@ class ChorusProApi:
1612
1631
  _response_types_map: Dict[str, Optional[str]] = {
1613
1632
  '200': "GetChorusProIdResponse",
1614
1633
  '422': "HTTPValidationError",
1634
+ '401': "APIError",
1615
1635
  }
1616
1636
  response_data = self.api_client.call_api(
1617
1637
  *_param,
@@ -1753,6 +1773,7 @@ class ChorusProApi:
1753
1773
  _response_types_map: Dict[str, Optional[str]] = {
1754
1774
  '200': "object",
1755
1775
  '422': "HTTPValidationError",
1776
+ '401': "APIError",
1756
1777
  }
1757
1778
  response_data = self.api_client.call_api(
1758
1779
  *_param,
@@ -1821,6 +1842,7 @@ class ChorusProApi:
1821
1842
  _response_types_map: Dict[str, Optional[str]] = {
1822
1843
  '200': "object",
1823
1844
  '422': "HTTPValidationError",
1845
+ '401': "APIError",
1824
1846
  }
1825
1847
  response_data = self.api_client.call_api(
1826
1848
  *_param,
@@ -1889,6 +1911,7 @@ class ChorusProApi:
1889
1911
  _response_types_map: Dict[str, Optional[str]] = {
1890
1912
  '200': "object",
1891
1913
  '422': "HTTPValidationError",
1914
+ '401': "APIError",
1892
1915
  }
1893
1916
  response_data = self.api_client.call_api(
1894
1917
  *_param,
@@ -2030,6 +2053,7 @@ class ChorusProApi:
2030
2053
  _response_types_map: Dict[str, Optional[str]] = {
2031
2054
  '200': "object",
2032
2055
  '422': "HTTPValidationError",
2056
+ '401': "APIError",
2033
2057
  }
2034
2058
  response_data = self.api_client.call_api(
2035
2059
  *_param,
@@ -2098,6 +2122,7 @@ class ChorusProApi:
2098
2122
  _response_types_map: Dict[str, Optional[str]] = {
2099
2123
  '200': "object",
2100
2124
  '422': "HTTPValidationError",
2125
+ '401': "APIError",
2101
2126
  }
2102
2127
  response_data = self.api_client.call_api(
2103
2128
  *_param,
@@ -2166,6 +2191,7 @@ class ChorusProApi:
2166
2191
  _response_types_map: Dict[str, Optional[str]] = {
2167
2192
  '200': "object",
2168
2193
  '422': "HTTPValidationError",
2194
+ '401': "APIError",
2169
2195
  }
2170
2196
  response_data = self.api_client.call_api(
2171
2197
  *_param,
@@ -2307,6 +2333,7 @@ class ChorusProApi:
2307
2333
  _response_types_map: Dict[str, Optional[str]] = {
2308
2334
  '200': "SearchStructureResponse",
2309
2335
  '422': "HTTPValidationError",
2336
+ '401': "APIError",
2310
2337
  }
2311
2338
  response_data = self.api_client.call_api(
2312
2339
  *_param,
@@ -2375,6 +2402,7 @@ class ChorusProApi:
2375
2402
  _response_types_map: Dict[str, Optional[str]] = {
2376
2403
  '200': "SearchStructureResponse",
2377
2404
  '422': "HTTPValidationError",
2405
+ '401': "APIError",
2378
2406
  }
2379
2407
  response_data = self.api_client.call_api(
2380
2408
  *_param,
@@ -2443,6 +2471,7 @@ class ChorusProApi:
2443
2471
  _response_types_map: Dict[str, Optional[str]] = {
2444
2472
  '200': "SearchStructureResponse",
2445
2473
  '422': "HTTPValidationError",
2474
+ '401': "APIError",
2446
2475
  }
2447
2476
  response_data = self.api_client.call_api(
2448
2477
  *_param,
@@ -2584,6 +2613,7 @@ class ChorusProApi:
2584
2613
  _response_types_map: Dict[str, Optional[str]] = {
2585
2614
  '200': "object",
2586
2615
  '422': "HTTPValidationError",
2616
+ '401': "APIError",
2587
2617
  }
2588
2618
  response_data = self.api_client.call_api(
2589
2619
  *_param,
@@ -2652,6 +2682,7 @@ class ChorusProApi:
2652
2682
  _response_types_map: Dict[str, Optional[str]] = {
2653
2683
  '200': "object",
2654
2684
  '422': "HTTPValidationError",
2685
+ '401': "APIError",
2655
2686
  }
2656
2687
  response_data = self.api_client.call_api(
2657
2688
  *_param,
@@ -2720,6 +2751,7 @@ class ChorusProApi:
2720
2751
  _response_types_map: Dict[str, Optional[str]] = {
2721
2752
  '200': "object",
2722
2753
  '422': "HTTPValidationError",
2754
+ '401': "APIError",
2723
2755
  }
2724
2756
  response_data = self.api_client.call_api(
2725
2757
  *_param,
@@ -2861,6 +2893,7 @@ class ChorusProApi:
2861
2893
  _response_types_map: Dict[str, Optional[str]] = {
2862
2894
  '200': "SubmitInvoiceResponse",
2863
2895
  '422': "HTTPValidationError",
2896
+ '401': "APIError",
2864
2897
  }
2865
2898
  response_data = self.api_client.call_api(
2866
2899
  *_param,
@@ -2929,6 +2962,7 @@ class ChorusProApi:
2929
2962
  _response_types_map: Dict[str, Optional[str]] = {
2930
2963
  '200': "SubmitInvoiceResponse",
2931
2964
  '422': "HTTPValidationError",
2965
+ '401': "APIError",
2932
2966
  }
2933
2967
  response_data = self.api_client.call_api(
2934
2968
  *_param,
@@ -2997,6 +3031,7 @@ class ChorusProApi:
2997
3031
  _response_types_map: Dict[str, Optional[str]] = {
2998
3032
  '200': "SubmitInvoiceResponse",
2999
3033
  '422': "HTTPValidationError",
3034
+ '401': "APIError",
3000
3035
  }
3001
3036
  response_data = self.api_client.call_api(
3002
3037
  *_param,
@@ -3138,6 +3173,7 @@ class ChorusProApi:
3138
3173
  _response_types_map: Dict[str, Optional[str]] = {
3139
3174
  '200': "object",
3140
3175
  '422': "HTTPValidationError",
3176
+ '401': "APIError",
3141
3177
  }
3142
3178
  response_data = self.api_client.call_api(
3143
3179
  *_param,
@@ -3206,6 +3242,7 @@ class ChorusProApi:
3206
3242
  _response_types_map: Dict[str, Optional[str]] = {
3207
3243
  '200': "object",
3208
3244
  '422': "HTTPValidationError",
3245
+ '401': "APIError",
3209
3246
  }
3210
3247
  response_data = self.api_client.call_api(
3211
3248
  *_param,
@@ -3274,6 +3311,7 @@ class ChorusProApi:
3274
3311
  _response_types_map: Dict[str, Optional[str]] = {
3275
3312
  '200': "object",
3276
3313
  '422': "HTTPValidationError",
3314
+ '401': "APIError",
3277
3315
  }
3278
3316
  response_data = self.api_client.call_api(
3279
3317
  *_param,
@@ -3415,6 +3453,7 @@ class ChorusProApi:
3415
3453
  _response_types_map: Dict[str, Optional[str]] = {
3416
3454
  '200': "object",
3417
3455
  '422': "HTTPValidationError",
3456
+ '401': "APIError",
3418
3457
  }
3419
3458
  response_data = self.api_client.call_api(
3420
3459
  *_param,
@@ -3483,6 +3522,7 @@ class ChorusProApi:
3483
3522
  _response_types_map: Dict[str, Optional[str]] = {
3484
3523
  '200': "object",
3485
3524
  '422': "HTTPValidationError",
3525
+ '401': "APIError",
3486
3526
  }
3487
3527
  response_data = self.api_client.call_api(
3488
3528
  *_param,
@@ -3551,6 +3591,7 @@ class ChorusProApi:
3551
3591
  _response_types_map: Dict[str, Optional[str]] = {
3552
3592
  '200': "object",
3553
3593
  '422': "HTTPValidationError",
3594
+ '401': "APIError",
3554
3595
  }
3555
3596
  response_data = self.api_client.call_api(
3556
3597
  *_param,
@@ -3655,6 +3696,7 @@ class ChorusProApi:
3655
3696
  ) -> object:
3656
3697
  """Consult an invoice (Validator)
3657
3698
 
3699
+ Retrieves detailed information about an invoice for validators. **Use case**: Called by validators (public sector) to consult invoice details before approving or rejecting it. **Required payload**: ```json { \"idFacture\": 123456789 } ``` **Returns**: Complete invoice details including amounts, dates, attachments, and current status.
3658
3700
 
3659
3701
  :param request_body: (required)
3660
3702
  :type request_body: Dict[str, object]
@@ -3691,6 +3733,7 @@ class ChorusProApi:
3691
3733
  _response_types_map: Dict[str, Optional[str]] = {
3692
3734
  '200': "object",
3693
3735
  '422': "HTTPValidationError",
3736
+ '401': "APIError",
3694
3737
  }
3695
3738
  response_data = self.api_client.call_api(
3696
3739
  *_param,
@@ -3722,6 +3765,7 @@ class ChorusProApi:
3722
3765
  ) -> ApiResponse[object]:
3723
3766
  """Consult an invoice (Validator)
3724
3767
 
3768
+ Retrieves detailed information about an invoice for validators. **Use case**: Called by validators (public sector) to consult invoice details before approving or rejecting it. **Required payload**: ```json { \"idFacture\": 123456789 } ``` **Returns**: Complete invoice details including amounts, dates, attachments, and current status.
3725
3769
 
3726
3770
  :param request_body: (required)
3727
3771
  :type request_body: Dict[str, object]
@@ -3758,6 +3802,7 @@ class ChorusProApi:
3758
3802
  _response_types_map: Dict[str, Optional[str]] = {
3759
3803
  '200': "object",
3760
3804
  '422': "HTTPValidationError",
3805
+ '401': "APIError",
3761
3806
  }
3762
3807
  response_data = self.api_client.call_api(
3763
3808
  *_param,
@@ -3789,6 +3834,7 @@ class ChorusProApi:
3789
3834
  ) -> RESTResponseType:
3790
3835
  """Consult an invoice (Validator)
3791
3836
 
3837
+ Retrieves detailed information about an invoice for validators. **Use case**: Called by validators (public sector) to consult invoice details before approving or rejecting it. **Required payload**: ```json { \"idFacture\": 123456789 } ``` **Returns**: Complete invoice details including amounts, dates, attachments, and current status.
3792
3838
 
3793
3839
  :param request_body: (required)
3794
3840
  :type request_body: Dict[str, object]
@@ -3825,6 +3871,7 @@ class ChorusProApi:
3825
3871
  _response_types_map: Dict[str, Optional[str]] = {
3826
3872
  '200': "object",
3827
3873
  '422': "HTTPValidationError",
3874
+ '401': "APIError",
3828
3875
  }
3829
3876
  response_data = self.api_client.call_api(
3830
3877
  *_param,
@@ -3966,6 +4013,7 @@ class ChorusProApi:
3966
4013
  _response_types_map: Dict[str, Optional[str]] = {
3967
4014
  '200': "object",
3968
4015
  '422': "HTTPValidationError",
4016
+ '401': "APIError",
3969
4017
  }
3970
4018
  response_data = self.api_client.call_api(
3971
4019
  *_param,
@@ -4034,6 +4082,7 @@ class ChorusProApi:
4034
4082
  _response_types_map: Dict[str, Optional[str]] = {
4035
4083
  '200': "object",
4036
4084
  '422': "HTTPValidationError",
4085
+ '401': "APIError",
4037
4086
  }
4038
4087
  response_data = self.api_client.call_api(
4039
4088
  *_param,
@@ -4102,6 +4151,7 @@ class ChorusProApi:
4102
4151
  _response_types_map: Dict[str, Optional[str]] = {
4103
4152
  '200': "object",
4104
4153
  '422': "HTTPValidationError",
4154
+ '401': "APIError",
4105
4155
  }
4106
4156
  response_data = self.api_client.call_api(
4107
4157
  *_param,
@@ -4243,6 +4293,7 @@ class ChorusProApi:
4243
4293
  _response_types_map: Dict[str, Optional[str]] = {
4244
4294
  '200': "object",
4245
4295
  '422': "HTTPValidationError",
4296
+ '401': "APIError",
4246
4297
  }
4247
4298
  response_data = self.api_client.call_api(
4248
4299
  *_param,
@@ -4311,6 +4362,7 @@ class ChorusProApi:
4311
4362
  _response_types_map: Dict[str, Optional[str]] = {
4312
4363
  '200': "object",
4313
4364
  '422': "HTTPValidationError",
4365
+ '401': "APIError",
4314
4366
  }
4315
4367
  response_data = self.api_client.call_api(
4316
4368
  *_param,
@@ -4379,6 +4431,7 @@ class ChorusProApi:
4379
4431
  _response_types_map: Dict[str, Optional[str]] = {
4380
4432
  '200': "object",
4381
4433
  '422': "HTTPValidationError",
4434
+ '401': "APIError",
4382
4435
  }
4383
4436
  response_data = self.api_client.call_api(
4384
4437
  *_param,