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:
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)
/api/externalVérifie que l'API est en ligne et que vos identifiants sont valides.
1{
2 "status": "online",
3 "message": "API externe Finance_App opérationnelle"
4}/api/external/projectsCré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:
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):
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):
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.externalIdest obligatoire et doit être unique pour chaque service externe - Si un
externalIdest déjà utilisé, l'API renverra une erreur 409 (Conflict) avec les détails du projet existant - Le paramètre
growthRatecontrô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
requestedAmountest 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
/api/external/get-projectRé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:
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):
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}/api/external/verify-forecast-stateVé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:
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):
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
| Code | Description |
|---|---|
| 200 | Succès |
| 400 | Requête incorrecte (données manquantes ou invalides) |
| 401 | Authentification incorrecte (client ID ou secret invalides) |
| 404 | Ressource non trouvée |
| 409 | Conflit (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.