Skip to main content

API REST FactPulse

Project description

factpulse-sdk

API REST pour la facturation électronique en France : Factur-X, AFNOR PDP/PA, signatures électroniques.

🎯 Fonctionnalités principales

📄 Génération de factures Factur-X

  • Formats : XML seul ou PDF/A-3 avec XML embarqué
  • Profils : MINIMUM, BASIC, EN16931, EXTENDED
  • Normes : EN 16931 (directive UE 2014/55), ISO 19005-3 (PDF/A-3), CII (UN/CEFACT)
  • 🆕 Format simplifié : Génération à partir de SIRET + auto-enrichissement (API Chorus Pro + Recherche Entreprises)

✅ Validation et conformité

  • Validation XML : Schematron (45 à 210+ règles selon profil)
  • Validation PDF : PDF/A-3, métadonnées XMP Factur-X, signatures électroniques
  • VeraPDF : Validation stricte PDF/A (146+ règles ISO 19005-3)
  • Traitement asynchrone : Support Celery pour validations lourdes (VeraPDF)

📡 Intégration AFNOR PDP/PA (XP Z12-013)

  • Soumission de flux : Envoi de factures vers Plateformes de Dématérialisation Partenaires
  • Recherche de flux : Consultation des factures soumises
  • Téléchargement : Récupération des PDF/A-3 avec XML
  • Directory Service : Recherche d'entreprises (SIREN/SIRET)
  • Multi-client : Support de plusieurs configs PDP par utilisateur (stored credentials ou zero-storage)

✍️ Signature électronique PDF

  • Standards : PAdES-B-B, PAdES-B-T (horodatage RFC 3161), PAdES-B-LT (archivage long terme)
  • Niveaux eIDAS : SES (auto-signé), AdES (CA commerciale), QES (PSCO)
  • Validation : Vérification intégrité cryptographique et certificats
  • Génération de certificats : Certificats X.509 auto-signés pour tests

🔄 Traitement asynchrone

  • Celery : Génération, validation et signature asynchrones
  • Polling : Suivi d'état via /taches/{id_tache}/statut
  • Pas de timeout : Idéal pour gros fichiers ou validations lourdes

🔒 Authentification

Toutes les requêtes nécessitent un token JWT dans le header Authorization :

Authorization: Bearer YOUR_JWT_TOKEN

Comment obtenir un token JWT ?

🔑 Méthode 1 : API /api/token/ (Recommandée)

URL : https://www.factpulse.fr/api/token/

Cette méthode est recommandée pour l'intégration dans vos applications et workflows CI/CD.

Prérequis : Avoir défini un mot de passe sur votre compte

Pour les utilisateurs inscrits via email/password :

  • Vous avez déjà un mot de passe, utilisez-le directement

Pour les utilisateurs inscrits via OAuth (Google/GitHub) :

Exemple de requête :

curl -X POST https://www.factpulse.fr/api/token/ \\
  -H \"Content-Type: application/json\" \\
  -d '{
    \"username\": \"votre_email@example.com\",
    \"password\": \"votre_mot_de_passe\"
  }'

Paramètre optionnel client_uid :

Pour sélectionner les credentials d'un client spécifique (PA/PDP, Chorus Pro, certificats de signature), ajoutez client_uid :

curl -X POST https://www.factpulse.fr/api/token/ \\
  -H \"Content-Type: application/json\" \\
  -d '{
    \"username\": \"votre_email@example.com\",
    \"password\": \"votre_mot_de_passe\",
    \"client_uid\": \"550e8400-e29b-41d4-a716-446655440000\"
  }'

Le client_uid sera inclus dans le JWT et permettra à l'API d'utiliser automatiquement :

  • Les credentials AFNOR/PDP configurés pour ce client
  • Les credentials Chorus Pro configurés pour ce client
  • Les certificats de signature électronique configurés pour ce client

Réponse :

{
  \"access\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\",  // Token d'accès (validité: 30 min)
  \"refresh\": \"eyJ0eXAiOiJKV1QiLCJhbGc...\"  // Token de rafraîchissement (validité: 7 jours)
}

Avantages :

  • ✅ Automatisation complète (CI/CD, scripts)
  • ✅ Gestion programmatique des tokens
  • ✅ Support du refresh token pour renouveler automatiquement l'accès
  • ✅ Intégration facile dans n'importe quel langage/outil

🖥️ Méthode 2 : Génération via Dashboard (Alternative)

URL : https://www.factpulse.fr/dashboard/

Cette méthode convient pour des tests rapides ou une utilisation occasionnelle via l'interface graphique.

Fonctionnement :

  • Connectez-vous au dashboard
  • Utilisez les boutons "Generate Test Token" ou "Generate Production Token"
  • Fonctionne pour tous les utilisateurs (OAuth et email/password), sans nécessiter de mot de passe

Types de tokens :

  • Token Test : Validité 24h, quota 1000 appels/jour (gratuit)
  • Token Production : Validité 7 jours, quota selon votre forfait

Avantages :

  • ✅ Rapide pour tester l'API
  • ✅ Aucun mot de passe requis
  • ✅ Interface visuelle simple

Inconvénients :

  • ❌ Nécessite une action manuelle
  • ❌ Pas de refresh token
  • ❌ Moins adapté pour l'automatisation

📚 Documentation complète

Pour plus d'informations sur l'authentification et l'utilisation de l'API : https://www.factpulse.fr/documentation-api/

This Python package is automatically generated by the OpenAPI Generator project:

  • API version: 1.0.0
  • Package version: 2.0.7
  • Generator version: 7.18.0-SNAPSHOT
  • Build package: org.openapitools.codegen.languages.PythonClientCodegen

Requirements.

Python 3.9+

Installation & Usage

pip install

If the python package is hosted on a repository, you can install directly using:

pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git

(you may need to run pip with root permission: sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git)

Then import the package:

import factpulse

Setuptools

Install via Setuptools.

python setup.py install --user

(or sudo python setup.py install to install the package for all users)

Then import the package:

import factpulse

Tests

Execute pytest to run the tests.

Getting Started

Please follow the installation procedure and then run the following:

import factpulse
from factpulse.rest import ApiException
from pprint import pprint

# Defining the host is optional and defaults to http://localhost
# See configuration.py for a list of all supported configuration parameters.
configuration = factpulse.Configuration(
    host = "http://localhost"
)



# Enter a context with an instance of the API client
with factpulse.ApiClient(configuration) as api_client:
    # Create an instance of the API class
    api_instance = factpulse.AFNORPDPPAApi(api_client)

    try:
        # Endpoint OAuth2 pour authentification AFNOR
        api_response = api_instance.oauth_token_proxy_api_v1_afnor_oauth_token_post()
        print("The response of AFNORPDPPAApi->oauth_token_proxy_api_v1_afnor_oauth_token_post:\n")
        pprint(api_response)
    except ApiException as e:
        print("Exception when calling AFNORPDPPAApi->oauth_token_proxy_api_v1_afnor_oauth_token_post: %s\n" % e)

Documentation for API Endpoints

All URIs are relative to http://localhost

Class Method HTTP request Description
AFNORPDPPAApi oauth_token_proxy_api_v1_afnor_oauth_token_post POST /api/v1/afnor/oauth/token Endpoint OAuth2 pour authentification AFNOR
AFNORPDPPADirectoryServiceApi create_directory_line_proxy_api_v1_afnor_directory_v1_directory_line_post POST /api/v1/afnor/directory/v1/directory-line Creating a directory line
AFNORPDPPADirectoryServiceApi create_routing_code_proxy_api_v1_afnor_directory_v1_routing_code_post POST /api/v1/afnor/directory/v1/routing-code Create a routing code
AFNORPDPPADirectoryServiceApi delete_directory_line_proxy_api_v1_afnor_directory_v1_directory_line_id_instance_id_instance_delete DELETE /api/v1/afnor/directory/v1/directory-line/id-instance:{id_instance} Delete a directory line
AFNORPDPPADirectoryServiceApi directory_healthcheck_proxy_api_v1_afnor_directory_v1_healthcheck_get GET /api/v1/afnor/directory/v1/healthcheck Healthcheck Directory Service
AFNORPDPPADirectoryServiceApi get_directory_line_by_code_proxy_api_v1_afnor_directory_v1_directory_line_code_addressing_identifier_get GET /api/v1/afnor/directory/v1/directory-line/code:{addressing_identifier} Get a directory line
AFNORPDPPADirectoryServiceApi get_directory_line_by_id_instance_proxy_api_v1_afnor_directory_v1_directory_line_id_instance_id_instance_get GET /api/v1/afnor/directory/v1/directory-line/id-instance:{id_instance} Get a directory line
AFNORPDPPADirectoryServiceApi get_routing_code_by_id_instance_proxy_api_v1_afnor_directory_v1_routing_code_id_instance_id_instance_get GET /api/v1/afnor/directory/v1/routing-code/id-instance:{id_instance} Get a routing code by instance-id
AFNORPDPPADirectoryServiceApi get_routing_code_by_siret_and_code_proxy_api_v1_afnor_directory_v1_routing_code_siret_siret_code_routing_identifier_get GET /api/v1/afnor/directory/v1/routing-code/siret:{siret}/code:{routing_identifier} Get a routing code by SIRET and routing identifier
AFNORPDPPADirectoryServiceApi get_siren_by_code_insee_proxy_api_v1_afnor_directory_v1_siren_code_insee_siren_get GET /api/v1/afnor/directory/v1/siren/code-insee:{siren} Consult a siren (legal unit) by SIREN number
AFNORPDPPADirectoryServiceApi get_siren_by_id_instance_proxy_api_v1_afnor_directory_v1_siren_id_instance_id_instance_get GET /api/v1/afnor/directory/v1/siren/id-instance:{id_instance} Gets a siren (legal unit) by instance ID
AFNORPDPPADirectoryServiceApi get_siret_by_code_insee_proxy_api_v1_afnor_directory_v1_siret_code_insee_siret_get GET /api/v1/afnor/directory/v1/siret/code-insee:{siret} Gets a siret (facility) by SIRET number
AFNORPDPPADirectoryServiceApi get_siret_by_id_instance_proxy_api_v1_afnor_directory_v1_siret_id_instance_id_instance_get GET /api/v1/afnor/directory/v1/siret/id-instance:{id_instance} Gets a siret (facility) by id-instance
AFNORPDPPADirectoryServiceApi patch_directory_line_proxy_api_v1_afnor_directory_v1_directory_line_id_instance_id_instance_patch PATCH /api/v1/afnor/directory/v1/directory-line/id-instance:{id_instance} Partially updates a directory line
AFNORPDPPADirectoryServiceApi patch_routing_code_proxy_api_v1_afnor_directory_v1_routing_code_id_instance_id_instance_patch PATCH /api/v1/afnor/directory/v1/routing-code/id-instance:{id_instance} Partially update a private routing code
AFNORPDPPADirectoryServiceApi put_routing_code_proxy_api_v1_afnor_directory_v1_routing_code_id_instance_id_instance_put PUT /api/v1/afnor/directory/v1/routing-code/id-instance:{id_instance} Completely update a private routing code
AFNORPDPPADirectoryServiceApi search_directory_line_proxy_api_v1_afnor_directory_v1_directory_line_search_post POST /api/v1/afnor/directory/v1/directory-line/search Search for a directory line
AFNORPDPPADirectoryServiceApi search_routing_code_proxy_api_v1_afnor_directory_v1_routing_code_search_post POST /api/v1/afnor/directory/v1/routing-code/search Search for a routing code
AFNORPDPPADirectoryServiceApi search_siren_proxy_api_v1_afnor_directory_v1_siren_search_post POST /api/v1/afnor/directory/v1/siren/search SIREN search (or legal unit)
AFNORPDPPADirectoryServiceApi search_siret_proxy_api_v1_afnor_directory_v1_siret_search_post POST /api/v1/afnor/directory/v1/siret/search Search for a SIRET (facility)
AFNORPDPPAFlowServiceApi download_flow_proxy_api_v1_afnor_flow_v1_flows_flow_id_get GET /api/v1/afnor/flow/v1/flows/{flowId} Télécharger un flux
AFNORPDPPAFlowServiceApi flow_healthcheck_proxy_api_v1_afnor_flow_v1_healthcheck_get GET /api/v1/afnor/flow/v1/healthcheck Healthcheck Flow Service
AFNORPDPPAFlowServiceApi search_flows_proxy_api_v1_afnor_flow_v1_flows_search_post POST /api/v1/afnor/flow/v1/flows/search Rechercher des flux
AFNORPDPPAFlowServiceApi submit_flow_proxy_api_v1_afnor_flow_v1_flows_post POST /api/v1/afnor/flow/v1/flows Soumettre un flux de facturation
ChorusProApi ajouter_fichier_api_v1_chorus_pro_transverses_ajouter_fichier_post POST /api/v1/chorus-pro/transverses/ajouter-fichier Ajouter une pièce jointe
ChorusProApi completer_facture_api_v1_chorus_pro_factures_completer_post POST /api/v1/chorus-pro/factures/completer Compléter une facture suspendue (Fournisseur)
ChorusProApi consulter_facture_api_v1_chorus_pro_factures_consulter_post POST /api/v1/chorus-pro/factures/consulter Consulter le statut d'une facture
ChorusProApi consulter_structure_api_v1_chorus_pro_structures_consulter_post POST /api/v1/chorus-pro/structures/consulter Consulter les détails d'une structure
ChorusProApi lister_services_structure_api_v1_chorus_pro_structures_id_structure_cpp_services_get GET /api/v1/chorus-pro/structures/{id_structure_cpp}/services Lister les services d'une structure
ChorusProApi obtenir_id_chorus_pro_depuis_siret_api_v1_chorus_pro_structures_obtenir_id_depuis_siret_post POST /api/v1/chorus-pro/structures/obtenir-id-depuis-siret Utilitaire : Obtenir l'ID Chorus Pro depuis un SIRET
ChorusProApi rechercher_factures_destinataire_api_v1_chorus_pro_factures_rechercher_destinataire_post POST /api/v1/chorus-pro/factures/rechercher-destinataire Rechercher factures reçues (Destinataire)
ChorusProApi rechercher_factures_fournisseur_api_v1_chorus_pro_factures_rechercher_fournisseur_post POST /api/v1/chorus-pro/factures/rechercher-fournisseur Rechercher factures émises (Fournisseur)
ChorusProApi rechercher_structures_api_v1_chorus_pro_structures_rechercher_post POST /api/v1/chorus-pro/structures/rechercher Rechercher des structures Chorus Pro
ChorusProApi recycler_facture_api_v1_chorus_pro_factures_recycler_post POST /api/v1/chorus-pro/factures/recycler Recycler une facture (Fournisseur)
ChorusProApi soumettre_facture_api_v1_chorus_pro_factures_soumettre_post POST /api/v1/chorus-pro/factures/soumettre Soumettre une facture à Chorus Pro
ChorusProApi telecharger_groupe_factures_api_v1_chorus_pro_factures_telecharger_groupe_post POST /api/v1/chorus-pro/factures/telecharger-groupe Télécharger un groupe de factures
ChorusProApi traiter_facture_recue_api_v1_chorus_pro_factures_traiter_facture_recue_post POST /api/v1/chorus-pro/factures/traiter-facture-recue Traiter une facture reçue (Destinataire)
ChorusProApi valideur_consulter_facture_api_v1_chorus_pro_factures_valideur_consulter_post POST /api/v1/chorus-pro/factures/valideur/consulter Consulter une facture (Valideur)
ChorusProApi valideur_rechercher_factures_api_v1_chorus_pro_factures_valideur_rechercher_post POST /api/v1/chorus-pro/factures/valideur/rechercher Rechercher factures à valider (Valideur)
ChorusProApi valideur_traiter_facture_api_v1_chorus_pro_factures_valideur_traiter_post POST /api/v1/chorus-pro/factures/valideur/traiter Valider ou refuser une facture (Valideur)
SantApi racine_get GET / Vérifier l'état de l'API
TraitementFactureApi generer_certificat_test_api_v1_traitement_generer_certificat_test_post POST /api/v1/traitement/generer-certificat-test Générer un certificat X.509 auto-signé de test
TraitementFactureApi generer_facture_api_v1_traitement_generer_facture_post POST /api/v1/traitement/generer-facture Générer une facture Factur-X
TraitementFactureApi obtenir_statut_tache_api_v1_traitement_taches_id_tache_statut_get GET /api/v1/traitement/taches/{id_tache}/statut Obtenir le statut d'une tâche de génération
TraitementFactureApi signer_pdf_api_v1_traitement_signer_pdf_post POST /api/v1/traitement/signer-pdf Signer un PDF avec le certificat du client (PAdES-B-LT)
TraitementFactureApi signer_pdf_async_api_v1_traitement_signer_pdf_async_post POST /api/v1/traitement/signer-pdf-async Signer un PDF de manière asynchrone (Celery)
TraitementFactureApi soumettre_facture_complete_api_v1_traitement_factures_soumettre_complete_post POST /api/v1/traitement/factures/soumettre-complete Soumettre une facture complète (génération + signature + soumission)
TraitementFactureApi soumettre_facture_complete_async_api_v1_traitement_factures_soumettre_complete_async_post POST /api/v1/traitement/factures/soumettre-complete-async Soumettre une facture complète (asynchrone avec Celery)
TraitementFactureApi valider_pdf_facturx_api_v1_traitement_valider_pdf_facturx_post POST /api/v1/traitement/valider-pdf-facturx Valider un PDF Factur-X complet
TraitementFactureApi valider_pdf_facturx_async_api_v1_traitement_valider_facturx_async_post POST /api/v1/traitement/valider-facturx-async Valider un PDF Factur-X (asynchrone avec polling)
TraitementFactureApi valider_signature_pdf_endpoint_api_v1_traitement_valider_signature_pdf_post POST /api/v1/traitement/valider-signature-pdf Valider les signatures électroniques d'un PDF
TraitementFactureApi valider_xml_api_v1_traitement_valider_xml_post POST /api/v1/traitement/valider-xml Valider un XML Factur-X existant
UtilisateurApi obtenir_infos_utilisateur_api_v1_moi_get GET /api/v1/moi Obtenir les informations de l'utilisateur connecté

Documentation For Models

Documentation For Authorization

Authentication schemes defined for the API:

HTTPBearer

  • Type: Bearer authentication

Author

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

factpulse-2.0.7.tar.gz (146.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

factpulse-2.0.7-py3-none-any.whl (461.2 kB view details)

Uploaded Python 3

File details

Details for the file factpulse-2.0.7.tar.gz.

File metadata

  • Download URL: factpulse-2.0.7.tar.gz
  • Upload date:
  • Size: 146.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for factpulse-2.0.7.tar.gz
Algorithm Hash digest
SHA256 d612f783314439a9d006a19d0070da9b18cad2285738894dc35f5fa59b0b2d9d
MD5 3a7cba88d898cf1ba4843ebccbc50486
BLAKE2b-256 c4c12ee80a7bf4016b6fbcea1b736fd1976e052688c8c241372b88b0d7eadcdd

See more details on using hashes here.

File details

Details for the file factpulse-2.0.7-py3-none-any.whl.

File metadata

  • Download URL: factpulse-2.0.7-py3-none-any.whl
  • Upload date:
  • Size: 461.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for factpulse-2.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 d173063ebcc430db2677bdba370e6cbabb5d9512f4c0e6a6dc2a09b164cdafc3
MD5 17283ef05b993d97aa31517ca02a4f96
BLAKE2b-256 b66185278397e3718dac10722c0893a5553200388d94e7e96861fbc90e0e2985

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page