API & Sécurité

API Externe & Sécurité

Intégration sécurisée avec Finance_App via notre API et système d'authentification

L'API externe de Finance_App permet à vos applications de s'intégrer de manière sécurisée avec notre plateforme. Cette documentation technique vous guide à travers les points d'accès disponibles et les mécanismes de sécurité mis en place.

Sécurité et Authentification

Authentification par API Keys

Chaque service externe reçoit un couple client_id/client_secret unique pour s'authentifier de manière sécurisée.

Connexions HTTPS

Toutes les communications avec l'API sont chiffrées via TLS pour garantir la confidentialité des données.

Isolation des Données

Chaque service externe n'a accès qu'aux projets explicitement liés à son identifiant.

Liens de Partage Sécurisés

Génération automatique de liens de partage avec contrôle d'accès et expiration configurable.

Authentification à l'API

Toutes les requêtes à l'API doivent inclure les identifiants du service externe dans les en-têtes HTTP:

En-têtes HTTP
1{ 2 "x-client-id": "votre-client-id", 3 "x-client-secret": "votre-client-secret", 4 "Content-Type": "application/json" 5}

Pour obtenir vos identifiants d'API, contactez l'administrateur de la plateforme. Gardez vos identifiants secrets et ne les exposez jamais dans du code client.

Points d'Accès (Endpoints)

GET/api/external
Test de l'API

Vérifie que l'API est en ligne et que vos identifiants sont valides.

Exemple de réponse:
1{ 2 "status": "online", 3 "message": "API externe Finance_App opérationnelle" 4}
POST/api/external/projects
Création de projet

Crée un utilisateur (ou utilise un existant), un projet, et charge des données initiales en une seule requête.

Corps de la requête:

Requête
1{ 2 "user": { 3 "email": "utilisateur@example.com", 4 "name": "Nom Utilisateur" 5 }, 6 "project": { 7 "title": "Mon Nouveau Projet", 8 "description": "Description du projet", 9 "startDate": "2025-06-10", 10 "externalId": "PROJ-123" // Obligatoire et unique 11 }, 12 "forecast": { 13 "startYear": 2025, 14 "growthRate": 5.0 // Optionnel (défaut: 0) 15 }, 16 "data": { 17 "requestedAmount": 150000, // Optionnel 18 "articles": [ 19 { 20 "title": "Produit 1", 21 "articleType": "PRODUCT", 22 "unitPrice": 15.0, 23 "productionPrice": 5.0 24 } 25 ], 26 "personnelCharges": [ 27 { 28 "title": "Employé 1", 29 "monthlyValues": [ 30 { "month": 1, "value": 1500 }, 31 ... 32 ] 33 } 34 ], 35 "operationCharges": [ 36 { 37 "title": "Charge 1", 38 "monthlyValues": [ 39 { "month": 1, "value": 300 }, 40 ... 41 ] 42 } 43 ] 44 } 45}

Réponse en cas de succès (201):

Réponse 201
1{ 2 "success": true, 3 "projectId": "550e8400-e29b-41d4-a716-446655440000", 4 "projectTitle": "Mon Nouveau Projet", 5 "projectUrl": "https://finance-app.example.com/projects/550e8400-e29b-41d4-a716-446655440000", 6 "shareLink": "https://finance-app.example.com/s/abcd1234" 7}

Réponse en cas de conflit (409):

Réponse 409
1{ 2 "error": "Cet ID externe est déjà associé à un projet existant", 3 "existingProjectId": "550e8400-e29b-41d4-a716-446655440000", 4 "existingProjectTitle": "Mon Projet Existant" 5}

Notes importantes :

  • Si l'utilisateur avec l'email spécifié existe déjà, il sera utilisé au lieu d'en créer un nouveau
  • Le champ project.externalId est obligatoire et doit être unique pour chaque service externe
  • Si un externalId est déjà utilisé, l'API renverra une erreur 409 (Conflict) avec les détails du projet existant
  • Le paramètre growthRate contrôle les taux de croissance automatiques appliqués aux prévisions
  • Toutes les sections de données (articles, personnelCharges, operationCharges) sont optionnelles
  • Trois prévisions sont automatiquement créées (année de base, année+1, année+2)
  • Les charges du personnel sont répliquées dans les trois prévisions avec une augmentation de 5% par an (ou selon le growthRate spécifié)
  • Si un champ requestedAmount est spécifié, il sera réparti équitablement sur les trois prévisions
  • La réponse contient un lien de partage permanent automatiquement créé pour ce projet
GET/api/external/get-project
Récupération d'un projet

Récupère toutes les données d'un projet identifié par son ID externe.

Paramètres: ?externalId=id-dans-votre-systeme

Exemple de requête:

Requête GET
1GET /api/external/get-project?externalId=PROJ-123 2Headers: { 3 "x-client-id": "votre-client-id", 4 "x-client-secret": "votre-client-secret" 5}

Réponse en cas de succès (200):

Réponse 200
1{ 2 "success": true, 3 "project": { 4 "id": "550e8400-e29b-41d4-a716-446655440000", 5 "title": "Mon Nouveau Projet", 6 "description": "Description du projet", 7 "startDate": "2025-06-10", 8 "externalId": "PROJ-123", 9 "forecasts": [ 10 { 11 "id": "660f9500-f39c-51e5-b817-556766550000", 12 "title": "Prévision par défaut", 13 "startYear": 2025 14 } 15 ] 16 } 17}
GET/api/external/verify-forecast-state
Vérification des prévisions

Vérifie l'état d'une prévision pour s'assurer qu'elle est cohérente.

Paramètres: ?forecastId=uuid-de-la-prévision

Exemple de requête:

Requête GET
1GET /api/external/verify-forecast-state?forecastId=660f9500-f39c-51e5-b817-556766550000 2Headers: { 3 "x-client-id": "votre-client-id", 4 "x-client-secret": "votre-client-secret" 5}

Réponse en cas de succès (200):

Réponse 200
1{ 2 "success": true, 3 "projectId": "uuid-du-projet-finance-app", 4 "projectTitle": "Nom du projet", 5 "projectUrl": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/dashboard", 6 "forecasts": [ 7 { 8 "forecastId": "uuid-prévision-1", 9 "year": 2025, 10 "articlesCount": 3, 11 "budgetEntriesByType": { 12 "REVENUE": 2, 13 "PERSONNEL": 5, 14 "OPERATION": 4, 15 "EXTERNAL_INCOME": 1 16 }, 17 "hasData": true, 18 "urls": { 19 "overview": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/overview", 20 "articles": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/articles", 21 "personnelCharges": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/charges-personnel", 22 "operationCharges": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/charges-exploitation", 23 "taxesCharges": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/taxes-impots", 24 "fixedCharges": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/charges-fixes", 25 "establishmentCharges": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/besoins-demarrage", 26 "externalIncome": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-1/entrees-externes" 27 } 28 }, 29 { 30 "forecastId": "uuid-prévision-2", 31 "year": 2026, 32 "articlesCount": 0, 33 "budgetEntriesByType": { 34 "PERSONNEL": 5, 35 "OPERATION": 4, 36 "EXTERNAL_INCOME": 1 37 }, 38 "hasData": true, 39 "urls": { 40 "overview": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-2/overview", 41 "articles": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-2/articles", 42 "personnelCharges": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-2/charges-personnel" 43 // Autres URLs similaires (omises pour concision) 44 } 45 }, 46 { 47 "forecastId": "uuid-prévision-3", 48 "year": 2027, 49 "articlesCount": 0, 50 "budgetEntriesByType": { 51 "PERSONNEL": 5, 52 "OPERATION": 4, 53 "EXTERNAL_INCOME": 1 54 }, 55 "hasData": true, 56 "urls": { 57 "overview": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-3/overview", 58 "articles": "https://finance-app.domain.com/projects/uuid-du-projet-finance-app/data/forecasts/uuid-prévision-3/articles" 59 // Autres URLs similaires (omises pour concision) 60 } 61 } 62 ] 63}

Codes d'Erreur

CodeDescription
200Succès
400Requête incorrecte (données manquantes ou invalides)
401Authentification incorrecte (client ID ou secret invalides)
404Ressource non trouvée
409Conflit (ex: ID externe déjà utilisé)

Documentation complète

Pour une documentation détaillée de chaque endpoint, des structures de données et des exemples de code, consultez la page Structure des données.