NAV

Référence API

L’API de Coanda est organisée autour de REST. Notre API est predictible, a des URLs orientée ressource, accepte des corps de requêtes encodés en JSON, retourne des réponses encodées en JSON et utilise le standard HTTP pour les codes de retour et les méthodes.

Vous pouvez voir des exemples de code dans la zone sombre à droite.

Veuillez lire la partie sur l’authentification en premier SVP.

Authentification

Pour autoriser une requête, procédez comme suit:

# En shell, vous pouvez passer le bon header avec chaque requête
curl "api_endpoint_here"
  -H "Authorization: Bearer myToken"

Remplacez myToken avec le token généré.

Coanda utilise des tokens JWT pour autoriser l’accès à son API.

Coanda s’attend à ce que le token JWT soit inclus dans toutes les requêtes API dans un header qui à la structure suivante:

Authorization: Bearer myToken

Générer un token d’autorisation

curl "https://aaaic-backend.ppd.rafa.3a-digital.fr/user-service/v1/token/acquire?username=myuser%40test.com&password=testpassword"
-H "accept: text/plain"

La commande ci-dessus retourne un token JWT en string brut dans le corps de la réponse:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.dyt0CoTl4WoVjAHI9Q_CwSKhl6d_9rhM3NrXuJttkao

Ce endpoint génère un token JWT à partir d’une combinaison de nom d’utilisateur et mot de passe.

Requête HTTP

GET /user-service/v1/token/acquire

Paramètres d’URL

ParamètreDescription
usernameVotre username/clientId. Doit être envoyé url_encoded.
passwordVotre password/clientSecret. Doit être envoyé url_encoded.

Module Simulateur

Le module simulateur expose plusieurs endpoints permettant de réaliser différents calculs sur un projet d’épargne. Les trois endpoints principaux sont chacun dédié à un type de gestion (libre, déléguée, à horizon)

Gestion Libre

curl \
  --location 'https://aaaic-backend.ppd.rafa.3a-digital.fr/simulator-service/simulator/free_management' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <myToken>' \
  --data '{
    "simulation_start_date": "202008",
    "simple_deposits": [
      {
        "amount": 5000,
        "date": "202010"
      }
    ],
    "periodic_deposits": [
      {
        "amount": 197.2,
        "start_date": "202008",
        "end_date": "202507",
        "frequency": "MONTHLY"
      }
    ],
    "portfolio_composition": [
      {
        "isin": "LU1883308352",
        "currency": "GBP",
        "percentage": 50,
      },
      {
        "isin": "LU1681046931",
        "currency": "EUR",
        "percentage": 50,
      },
    ],
    "target_amount": 5000,
    "horizon": 60,
    "current_savings": 1000,
    "simulator_uuid": "aaaic:simulators:243",
}'

La commande ci-dessus retourne un objet JSON structuré de cette façon:

{
  "success_percentage": "float",
  "graphs": {
    "nb_scenarios": "int",
    "scenarios_smooth": [
      {
        "name": "string",
        "data": [
          {
            "x": "float",
            "y": "float"
          }
        ]
      }
    ],
    "synthesis": {
      "savings": {
        "x": "float",
        "y": "float"
      },
      "median": {
        "x": "float",
        "y": "float"
      },
      "lower_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      },
      "mid_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      },
      "upper_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      }
    },
    "success_percentage": "float",
    "scenarios_perc_above_cumulative_savings": "float",
    "id": "string",
    "scenarios": [
      {
        "name": "savings",
        "data": [
          {
            "x": "float",
            "y": "float"
          }
        ],
        "lineWidth": "float",
        "zIndex": "float"
      }
    ]
  },
  "statistics": {
    "mar_ratio": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "sharp_ratio": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "annualized_return": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "max_drawdown": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "annualized_volatility": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    }
  },
  "scenarios_table": {
    "capital_distribution_at_horizon": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "capital_gain_or_loss": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "absolute_return": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "cumulative_savings": "float",
    "gross_cumulative_savings": "float"
  },
  "uc_allocation": [
    {
      "series": "string",
      "percentage": "float"
    }
  ]
}

Ce endpoint réalise une simulation pour un projet d’épargne en gestion libre.

Requête HTTP

POST /simulator-service/simulator/free_management

Corps de la requête

Le corps de la requête est un objet JSON représentant une demande de simulation.

L’objet SimulationRequest

ParamètreObligatoireTypeDescription
simulator_uuidtruestringIdentifiant unique du simulateur. Fourni par AAA.
target_amountfalsenumberLa somme d’argent que l’on souhaite atteindre.
horizontrueintegerLa longueur du projet d’epargne (en mois).
current_savingsfalsenumberLe montant actuel de l’épargne.
start_datetruestringDate de début de la simulation. Le format est YYYYMM.
simple_depositsfalse[SimpleCashFlow]La liste des versements ponctuels anticipés.
periodic_depositsfalse[PeriodicCashFlow]La liste des versements récurrents anticipés.
simple_withdrawalsfalse[SimpleCashFlow]La liste des rachats ponctuels anticipés.
periodic_withdrawalsfalse[PeriodicCashFlow]La liste des rachats récurrents anticipés.
portfolio_compositiontrue[WeightedAsset]La composition du portefeuille.

The WeightedAsset object

ParameterMandatoryTypeDescription
isintruestringLe code ISIN du support.
currencytruestringLa devise du support, identifié par un trigrame (ex: “EUR”).
percentagetruenumberLe pourcentage investi dans cet support.

L’objet SimpleCashFlow

ParamètreObligatoireTypeDescription
amounttruenumberLa somme déposée ou retirée.
datetruestringLa date du mouvement. Le format est YYYYMM.

L’objet PeriodicCashFlow

ParamètreObligatoireTypeDescription
amounttruenumberLa somme déposée ou retirée.
start_datetruestringLa date de début du mouvement récurrent. Le format est YYYYMM.
end_datetruestringLa date de fin du mouvement récurrent. Le format est YYYYMM.
frequencytruestringLa fréquence de la récurrence. Les valeurs possibles sont: MONTHLY/QUARTERLY/YEARLY/SEMI_ANNUALLY

Gestion Pilotée

curl \
  --location 'https://aaaic-backend.ppd.rafa.3a-digital.fr/simulator-service/simulator/delegated_management' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <myToken>' \
  --data '{
    "simulation_start_date": "202008",
    "simple_deposits": [
      {
        "amount": 5000,
        "date": "202010"
      }
    ],
    "periodic_deposits": [
      {
        "amount": 197.2,
        "start_date": "202008",
        "end_date": "202507",
        "frequency": "MONTHLY"
      }
    ],
    "target_amount": 5000,
    "horizon": 60,
    "current_savings": 1000,
    "simulator_uuid": "aaaic:simulators:236",
    "profile_idx": 2
}'

La commande ci-dessus retourne un objet JSON structuré de cette façon:

{
  "success_percentage": "float",
  "graphs": {
    "nb_scenarios": "int",
    "scenarios_smooth": [
      {
        "name": "string",
        "data": [
          {
            "x": "float",
            "y": "float"
          }
        ]
      }
    ],
    "synthesis": {
      "savings": {
        "x": "float",
        "y": "float"
      },
      "median": {
        "x": "float",
        "y": "float"
      },
      "lower_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      },
      "mid_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      },
      "upper_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      }
    },
    "success_percentage": "float",
    "scenarios_perc_above_cumulative_savings": "float",
    "id": "string",
    "scenarios": [
      {
        "name": "savings",
        "data": [
          {
            "x": "float",
            "y": "float"
          }
        ],
        "lineWidth": "float",
        "zIndex": "float"
      }
    ]
  },
  "statistics": {
    "mar_ratio": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "sharp_ratio": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "annualized_return": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "max_drawdown": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "annualized_volatility": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    }
  },
  "scenarios_table": {
    "capital_distribution_at_horizon": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "capital_gain_or_loss": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "absolute_return": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "cumulative_savings": "float",
    "gross_cumulative_savings": "float"
  },
  "uc_allocation": [
    {
      "series": "string",
      "percentage": "float"
    }
  ]
}

Ce endpoint réalise une simulation pour un projet d’épargne en gestion pilotée.

Requête HTTP

POST /simulator-service/simulator/delegated_management

Corps de la requête

Le corps de la requête est un objet JSON représentant une demande de simulation.

L’objet SimulationRequest

ParamètreObligatoireTypeDescription
simulator_uuidtruestringIdentifiant unique du simulateur. Fourni par AAA.
target_amountfalsenumberLa somme d’argent que l’on souhaite atteindre.
horizontrueintegerLa longueur du projet d’epargne (en mois).
current_savingsfalsenumberLe montant actuel de l’épargne.
start_datetruestringDate de début de la simulation. Le format est YYYYMM.
simple_depositsfalse[SimpleCashFlow]La liste des versements ponctuels anticipés.
periodic_depositsfalse[PeriodicCashFlow]La liste des versements récurrents anticipés.
simple_withdrawalsfalse[SimpleCashFlow]La liste des rachats ponctuels anticipés.
periodic_withdrawalsfalse[PeriodicCashFlow]La liste des rachats récurrents anticipés.
profile_idxtrueintegerIdentifiant unique du profil de gestion pilotée. Fourni par AAA.

L’objet SimpleCashFlow

ParamètreObligatoireTypeDescription
amounttruenumberLa somme déposée ou retirée.
datetruestringLa date du mouvement. Le format est YYYYMM.

L’objet PeriodicCashFlow

ParamètreObligatoireTypeDescription
amounttruenumberLa somme déposée ou retirée.
start_datetruestringLa date de début du mouvement récurrent. Le format est YYYYMM.
end_datetruestringLa date de fin du mouvement récurrent. Le format est YYYYMM.
frequencytruestringLa fréquence de la récurrence. Les valeurs possibles sont: MONTHLY/QUARTERLY/YEARLY/SEMI_ANNUALLY

Gestion Pilotée à Horizon

curl \
  --location 'https://aaaic-backend.ppd.rafa.3a-digital.fr/simulator-service/simulator/glidepath_management' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <myToken>' \
  --data '{
    "simulation_start_date": "202008",
    "simple_deposits": [
      {
        "amount": 5000,
        "date": "202010"
      }
    ],
    "periodic_deposits": [
      {
        "amount": 197.2,
        "start_date": "202008",
        "end_date": "202507",
        "frequency": "MONTHLY"
      }
    ],
    "target_amount": 5000,
    "horizon": 60,
    "current_savings": 1000,
    "simulator_uuid": "aaaic:simulators:170",
    "profile_idx": 2,
    "age": 35
}'

La commande ci-dessus retourne un objet JSON structuré de cette façon:

{
  "success_percentage": "float",
  "graphs": {
    "nb_scenarios": "int",
    "scenarios_smooth": [
      {
        "name": "string",
        "data": [
          {
            "x": "float",
            "y": "float"
          }
        ]
      }
    ],
    "synthesis": {
      "savings": {
        "x": "float",
        "y": "float"
      },
      "median": {
        "x": "float",
        "y": "float"
      },
      "lower_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      },
      "mid_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      },
      "upper_area": {
        "x": "float",
        "high": "float",
        "low": "float"
      }
    },
    "success_percentage": "float",
    "scenarios_perc_above_cumulative_savings": "float",
    "id": "string",
    "scenarios": [
      {
        "name": "savings",
        "data": [
          {
            "x": "float",
            "y": "float"
          }
        ],
        "lineWidth": "float",
        "zIndex": "float"
      }
    ]
  },
  "statistics": {
    "mar_ratio": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "sharp_ratio": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "annualized_return": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "max_drawdown": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    },
    "annualized_volatility": {
      "quantile_25": "float",
      "quantile_2.5": "float",
      "quantile_50": "float",
      "quantile_75": "float",
      "quantile_97.5": "float"
    }
  },
  "scenarios_table": {
    "capital_distribution_at_horizon": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "capital_gain_or_loss": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "absolute_return": {
      "max": "float",
      "min": "float",
      "in_between": {
        "high": "float",
        "low": "float"
      }
    },
    "cumulative_savings": "float",
    "gross_cumulative_savings": "float"
  },
  "uc_allocation": [
    {
      "series": "string",
      "percentage": "float"
    }
  ]
}

Ce endpoint réalise une simulation pour un projet d’épargne en gestion pilotée.

Requête HTTP

POST /simulator-service/simulator/glidepath_management

Corps de la requête

Le corps de la requête est un objet JSON représentant une demande de simulation.

L’objet SimulationRequest

ParamètreObligatoireTypeDescription
simulator_uuidtruestringIdentifiant unique du simulateur. Fourni par AAA.
target_amountfalsenumberLa somme d’argent que l’on souhaite atteindre.
horizontrueintegerLa longueur du projet d’epargne (en mois).
current_savingsfalsenumberLe montant actuel de l’épargne.
start_datetruestringDate de début de la simulation. Le format est YYYYMM.
simple_depositsfalse[SimpleCashFlow]La liste des versements ponctuels anticipés.
periodic_depositsfalse[PeriodicCashFlow]La liste des versements récurrents anticipés.
simple_withdrawalsfalse[SimpleCashFlow]La liste des rachats ponctuels anticipés.
periodic_withdrawalsfalse[PeriodicCashFlow]La liste des rachats récurrents anticipés.
profile_idxtrueintegerIdentifiant unique du profil de gestion pilotée. Fourni par AAA.
agetrueintegerL’age du souscripteur.

L’objet SimpleCashFlow

ParamètreObligatoireTypeDescription
amounttruenumberLa somme déposée ou retirée.
datetruestringLa date du mouvement. Le format est YYYYMM.

L’objet PeriodicCashFlow

ParamètreObligatoireTypeDescription
amounttruenumberLa somme déposée ou retirée.
start_datetruestringLa date de début du mouvement récurrent. Le format est YYYYMM.
end_datetruestringLa date de fin du mouvement récurrent. Le format est YYYYMM.
frequencytruestringLa fréquence de la récurrence. Les valeurs possibles sont: MONTHLY/QUARTERLY/YEARLY/SEMI_ANNUALLY

Module Premia

Le module Premia est un outil intelligent qui accompagne les conseillers à chaque étape du devoir de conseil. Définition du profil de risque et des objectifs de l’épargnant, intégration de ses préférences ESG, pour une préconisation d’allocations sur-mesure grâce à un moteur algorithmique d’adéquation. Le tout permettant de générer automatiquement une proposition d’investissement complète, conforme et prête à partager avec l’épargnant.

Ce endpoint permet de créer une session Premia. Vous vous authentifiez avec un JWT, créez une session via l’API, puis redirigez l’utilisateur vers Premia avec le hash de session retourné.

Créer une session Premia

# Example 1 : souscription à un nouveau contrat

curl \
  --location '{BASE_BACKEND_URL}/premia/api/v1/sessions' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <myToken>' \
  --data '{
    "recoJourneyUuid": "aaaic:reco_journeys:4",
    "extProductCode": "PERZEN",
    "extSessionCode": "123456",
    "contactEmail": "adeline.monet@gmail.com",
    "clientLastName": "Monet",
    "clientFirstName": "Adeline",
    "clientBirthDate": "19800101",
    "coSubscriberLastName": "Jean",
    "coSubscriberFirstName": "Monet",
    "coSubscriberBirthDate": "19780331",
    "legalPersonName": "",
    "legalPersonIdentifier": "",
    "legalPersonRepresentativeLastName": "",
    "legalPersonRepresentativeFirstName": "",
    "depositInitialEnabled": true,
    "depositInitial": 5000
  }'
  
  # Example 2 : versement / rachat / arbitrage
  
  curl \
  --location '{BASE_BACKEND_URL}/premia/api/v1/sessions' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <myToken>' \
  --data '{
    "recoJourneyUuid": "aaaic:reco_journeys:13",
    "extSessionCode": "123456",
    "extProductCode": "01t0N00000B9B8pQAF",
    "contactEmail": "adeline.monet@gmail.com",
    "clientLastName": "Monet",
    "clientFirstName": "Adeline",
    "clientBirthDate": "19800101",
    "coSubscriberLastName": "Jean",
    "coSubscriberFirstName": "Monet",
    "coSubscriberBirthDate": "19780331",
    "legalPersonName": "",
    "legalPersonIdentifier": "",
    "legalPersonRepresentativeLastName": "",
    "legalPersonRepresentativeFirstName": "",
    "depositInitialEnabled": false,
    "clientRiskKey": "2",
    "clientRiskKeyLastUpdateDate": "20250101",
    "hasSustainablePreferences": true,
    "minSustainableInvestments": 15,
    "minTaxonomyAlignment": null,
    "minCoveragePai": 0.50,
    "greenhouseGasEmissions": true,
    "impactOnBiodiversity": false,
    "waterEmissions": true,
    "hazardousWaste": false,
    "controversialWeapons": false,
    "monitoringOfInternationalPrinciples": false,
    "respectOfInternationalPrinciples": false,
    "genderPayGap": false,
    "lowBoardGenderDiversity": false,
    "clientEsgLastUpdateDate": "20250101",
    "periodicDepositsEnabled": true,
    "regularContributionsAmount": 500,
    "regularContributionsFormat": "CHOSEN_FREQUENCY",
    "regularContributionsFrequency": "MONTHLY",
    "currentComposition": {
        "compositionParts": [
            {
                "partWeights": [
                    {
                        "amount": 400,
                        "displayName": "Mirova Europe Environnement",
                        "extCode": "LU0914733059"
                    },
                    {
                        "amount": 300,
                        "displayName": "Afer Rendement Juin 2023",
                        "extCode": "FR5272AB0288"
                    },
                    {
                        "amount": 250,
                        "displayName": "SC Advenis Immo Capital",
                        "extCode": "P801_SCI001"
                    }
                ],
                "type": "FREE_MANAGEMENT"
            }
        ]
    }
  }'

La commande ci-dessus retourne un objet JSON structuré de cette façon :

{
  "sessionHash": "abc123"
}

Requête HTTP

POST /premia/api/v1/sessions

Corps de la requête

Le corps de la requête est un objet JSON contenant toutes les informations nécessaires pour initier une session sur Premia. Selon le cas d’usage, il est construit différemment. Des exemples sont fournis à droite pour illustrer les cas suivants :

Réponse

En réponse, le service fournit un hash de session, nécessaire pour initier la session correspondante sur Premia.

L'objet PremiaSessionRequest

ParamètreObligatoireTypeDescription
recoJourneyUuidtruestringIdentifiant de la configuration Premia à utiliser. Fourni par AAA.
extProductCodetruestringVotre code produit dans le système partenaire (ex : PERZEN).
extSessionCodetruestringVotre référence interne pour la traçabilité.
contactEmailfalsestringEmail de contact pour les notifications.
clientLastNametruestringNom de famille du client.
clientFirstNametruestringPrénom du client.
clientBirthDatetruestringDate de naissance du client au format YYYYMMDD.
coSubscriberLastNamefalsestringNom de famille du co-souscripteur (si applicable).
coSubscriberFirstNamefalsestringPrénom du co-souscripteur (si applicable).
coSubscriberBirthDatefalsestringDate de naissance du co-souscripteur au format YYYYMMDD (si applicable).
legalPersonNamefalsestringNom de la personne morale (pour les souscriptions d’entreprise).
legalPersonIdentifierfalsestringIdentifiant de la personne morale (ex : SIREN).
legalPersonRepresentativeLastNamefalsestringNom du représentant légal (pour les souscriptions d’entreprise).
legalPersonRepresentativeFirstNamefalsestringPrénom du représentant légal (pour les souscriptions d’entreprise).
depositInitialEnabledfalsebooleanIndique si un dépôt initial est activé.
depositInitialconditionnelnumberMontant du dépôt initial. Obligatoire quand depositInitialEnabled est true.
clientRiskKeyfalsestringProfil de risque du client. Clé de risque (ex : “2”).
clientRiskKeyLastUpdateDatefalsestringDate de dernière mise à jour du profil de risque au format YYYYMMDD.
hasSustainablePreferencesfalsebooleanLe client a des préférences ESG ?
minSustainableInvestmentsfalsenumber% minimum d’investissements durables (format “15” pour 15%).
minTaxonomyAlignmentfalsenumber% minimum aligné taxonomie (format “15” pour 15%).
minCoveragePaifalsenumber% minimum de couverture PAI (format “15” pour 15%).
greenhouseGasEmissionsfalsebooleanPAI Climat.
impactOnBiodiversityfalsebooleanPAI Biodiversité.
waterEmissionsfalsebooleanPAI Qualité de l’eau.
hazardousWastefalsebooleanPAI Gestion responsable des déchets.
controversialWeaponsfalsebooleanPAI Contrôle des armes controversées.
monitoringOfInternationalPrinciplesfalsebooleanPAI Contrôle des normes internationales.
respectOfInternationalPrinciplesfalsebooleanPAI Respect des normes internationales.
genderPayGapfalsebooleanPAI Égalité de rémunération hommes/femmes.
lowBoardGenderDiversityfalsebooleanPAI Mixité des conseils d’administration.
clientEsgLastUpdateDatefalsestringDate de dernière mise à jour des préférences ESG au format YYYYMMDD.
periodicDepositsEnabledfalsebooleanVersements programmés en place ?
regularContributionsAmountconditionnelnumberMontant du versement programmé. Obligatoire si periodicDepositsEnabled est true.
regularContributionsFormatfalsestringFormat des contributions. Valeurs : “CHOSEN_FREQUENCY”.
regularContributionsFrequencyfalsestringFréquence des contributions. Valeurs : “MONTHLY”, “QUARTERLY”, “SEMIANNUALLY”, “ANNUALLY”.
currentCompositionfalseobjectComposition de l’allocation actuelle.
extCodefalsestringCode du support. Contexte : dans currentComposition.compositionParts[].partWeights[].
displayNamefalsestringNom de l’actif financier. Contexte : dans currentComposition.compositionParts[].partWeights[].
amountfalsenumberValeur marchande de la ligne. Contexte : dans currentComposition.compositionParts[].partWeights[].

Si l’entrée n’est pas valide ou que vous n’avez pas accès, l’API retournera des erreurs HTTP standard (400, 403, 404) avec un corps JSON décrivant le problème.

Rediriger l'utilisateur vers Premia

Une fois que vous recevez le sessionHash, redirigez le navigateur de l’utilisateur vers Premia en utilisant l’URL suivante :

{BASE_UI_URL}/premia/sessions?hash={sessionHash}

Remplacez {BASE_UI_URL} par l’hôte Premia avec lequel vous vous intégrez (staging, production, etc.).

const res = await fetch(`${BASE_BACKEND_URL}/premia/api/v1/sessions`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${token}`,
  },
  body: JSON.stringify(payload),
});
const { sessionHash } = await res.json();
window.location.href = `${BASE_UI_URL}/premia/sessions?hash=${sessionHash}`;

Reprendre une session Premia

Une fois que vous connaissez le sessionHash, redirigez le navigateur de l’utilisateur vers Premia en utilisant l’URL suivante :

{BASE_UI_URL}/premia/sessions?hash={sessionHash}

Remplacez {BASE_UI_URL} par l’hôte Premia avec lequel vous vous intégrez (staging, production, etc.).

Erreurs

L’API Coanda utilise les codes d’erreur suivants:

4xx

Code d’erreurSignification
401Unauthorized – Le token n’est pas valide.
403Forbidden – Le token est valide mais pas les permissions associées.
404Not Found – Le endpoint demandé n’existe pas.
405Method Not Allowed – La méthode HTTP spécifié n’est pas supportée.
422Bad Request – La requête est invalide.
429Too Many Requests – Trop de requêtes envoyées d’un coup. Ralentissez !

5xx

Error CodeMeaning
500Internal Server Error – Erreur générique coté serveur. Réessayez plus tard.
503Service Unavailable – Service en maintenance. Réessayez plus tard.