Description
Lorsque vous disposez de plusieurs partenaires bancaires, il peut s'avérer long et coûteux pour vos opérateurs de saisie de se connecter à chacune des interfaces mise à disposition par ces derniers et d'y saisir toutes les informations relatives aux dossiers que vous souhaitez faire accepter.
Les banques mettent à disposition des API permettant le transfert des données dans le but d'accélérer ce processus.
Vous avez donc surement décidé de développer vos propres solutions et avez pu rapidement vous rendre compte des difficultés de la tâche :
- Chaque API est différente et cela implique un développement spécifique pour chacune d'entre elles.
- Les critères d'acceptation diffèrent d'une banque à une autre et vous éprouvez de plus en plus de difficultés à intégrer ces différences dans la logique responsable de l'envoi des données.
- Plus vous branchez d'API, plus le temps alloué à leur maintenance ainsi qu'à leur évolutivité augmente de façon proportionnelle, engendrant des coûts de plus en plus importants.
L'API de Keyfast Gateways, en prenant le contrôle du transfert du flux de données, intervient en tant que solution à ces problématiques puisqu'elle propose :
- Un format unique d'entrée au format JSON pour toutes les banques et par voie de conséquence : une seule intégration à développer sur vos différents outils internes.
- Une maintenance et une évolutivité calquée sur les mises à jour imposées par les partenaires bancaires.
- Un contrôle des données en amont, basé sur une expérience métier de plusieurs années, duquel découle une meilleure acceptation des dossiers par les diverses API.
- Un support technique réactif facilitant le debug et l'intégration de l'API.
En définitive, l'API de Keyfast Gateways vient corriger les défauts précités dans le but de vous faire gagner un maximum de temps possible. Vos opérateurs de saisie gagneront en productivité et pourront davantage se consacrer à leurs clients.
Informations préliminaires
Environnements
Keyfast Gateways dispose de deux environnements pour vous permettre de stabiliser vos développements et de protéger les données à caractère personnel de vos clients :
- Un environnement de préproduction.
- Un environnement de production.
Chaque fois que nécessaire dans cette documentation, nous traiterons des deux différents cas (accès au manageur ou URL d'appel par exemple).
Banques disponibles
Dans sa version actuelle, Keyfast Gateways gère l'envoi de données pour les banques suivantes :
- Créatis.
- MyMoneyBank.
- Sygma.
- CréditLift.
- CFCAL.
Communication et contact
Afin de faciliter les échanges, Keyfast Gateways a choisi Slack.
Pour rejoindre l'espace de travail dédié à nos échanges et pour que nous puissions vous créer des accès à notre manageur (son utilité est évoqué plus loin), vous devrez au préalable en fournir la demande par email dans lequel il faudra nous fournir impérativement les informations de votre société suivantes :
- Son nom.
- Son SIREN.
- Son NIC.
- Votre numéro ORIAS.
- L'adresse email du manageur de votre société (qui administrera les identifiants et les utilisateurs via le manageur).
Vous recevrez par email une invitation à rejoindre notre espace de travail et vos mots de passe pour les deux environnements du manageur respectifs.
Lorsque vous aurez joint cet espace, vous disposerez de l'accès à plusieurs canaux :
- Le canal privé portant le nom de votre société : utilisé pour toute question relative à l'intégration de la passerelle ou pour toute remontée de bug éventuel.
- Le canal #bugs : utilisé pour la remontée des bugs lorsque ceux ci pourraient potentiellement concerner d'autres utilisateurs.
- Le canal #documentation : vous y trouverez les informations complémentaires qui viendront éventuellement se greffer à la documentation fournie par le manageur, comme le document annexe que vous êtes en train de lire ainsi que les mises à jour de ce dernier.
- Le canal #releases : celui-ci traitera des changements que nous seront amenés à apporter à l'API et vous permettra d'être prévenu instantanément des évolutions futures.
Gestion des accès
Accès aux API bancaires
Créatis impose qu'on adresse au préalable une demande, à leurs services techniques, (nous nous en chargeons par mail) d'accès à leurs webservices. Pour cette raison, nous vous demandons de bien vouloir nous communiquer votre volonté d'envoyer des dossiers chez eux afin qu'ils puissent débloquer l'accès en 48H (délai fourni par la banque) après notre demande. Sans cette démarche, votre numéro de contremarque sera refusé chez eux et vous obtiendrez une erreur d'authentification.
Accès à l'API de Keyfast Gateways
Afin de centraliser la gestion des identifiants bancaires, Keyfast Gateways dispose d'une interface : le manageur.
L'accès à celle ci dépend de l'environnement dans lequel vous souhaitez administrer vos utilisateurs et identifiants :
- En préproduction : https://preprod.passerelles.keyfast.pro.
- En production : https://passerelles.keyfast.pro.
Comme évoqué précédemment, vous en avez reçu les accès par email.
Cette application vous permet :
- D'ajouter, supprimer ou désactiver des utilisateurs.
- D'ajouter et supprimer des identifiants bancaires soit à votre société, soit à un utilisateur en particulier.
Vous remarquerez également qu'il est possible d'associer un rôle à chaque utilisateur, il est donc nécessaire d'expliquer en quoi ils consistent :
- Manageur : donne accès à la gestion des utilisateurs et des identifiants bancaires ainsi qu'à la documentation.
- Développeur : donne accès uniquement à la documentation.
- Opérateur : peut seulement envoyer des données via l'API.
Informations relatives à la structure des identifiants bancaires
Pour la plupart des banques, un seul identifiant est nécessaire, mais ce n'est pas toujours le cas.
Cette section a pour but d'éclaircir ce point.
CFCAL
- Identifiant du compte technique : il s'agit de l'identifiant du compte technique.
- Mot de passe du compte technique : communiqué par CFCAL en même temps que l'identifiant du compte technique.
- Identifiant du compte métier : appelé par CFCAL "IdentifiantEnTantQue", il s'agit de l'identifiant de la personne désirant s'authentifier.
MyMoneyBank
- Identifiant client : depuis la version 2 de son API, MyMoneyBank génère un identifiant unique par société.
- Identifiant secret : communiqué par MyMoneyBank en même temps que l'identifiant client.
- Code apporteur : appelé par MyMoneyBank code "APR", permet de rattacher un dossier à une agence.
Authentification et envoi
Exemple du contenu du payload d'authentification :
{
"email": "exampleemail@test.com",
"password": "examplepassword"
}
Asurez vous de remplacer
exampleemail@test.com
par votre email etexamplepassword
par le mot de passe de votre compte Keyfast Gateways.Une authentication qui s'est bien déroulée vous retournera un payload sous cette forme :
{
"status": true,
"credentials": {
"accessToken": "myaccesstoken",
"accessTokenExpireAt": "2022-08-10 13:29:43",
"refreshToken": "myrefreshtoken",
"refreshTokenExpireAt": "2022-08-15 12:29:43"
},
"user": {
"id": 50,
"email": "exampleemail@test.com",
"description": null,
"enabled": true,
"roles": [
"ROLE_MANAGER",
"ROLE_USER"
],
"company": {
"id": 40,
"name": "mycompany"
}
}
}
Keyfast Gateways utilise un système d'authentification basé sur un token d'accès à durée limitée.
Pour obtenir un token, vous devrez vous authentifier sur l'API via les URL suivantes :
- En préproduction :
POST https://preprod.gateways.keyfast.pro/auth
. - En production :
POST https://gateways.keyfast.pro/auth
.
Le token ainsi obtenu devra être envoyé dans l'entête de la requête Authorization
avec comme valeur Bearer mytoken
pour chaque envoi de dossier.
Les URL de base pour envoyer vos dossiers sont différentes selon l'environnement :
- En préproduction :
https://preprod.gateways.keyfast.pro
. - En production :
https://gateways.keyfast.pro
.
Vous devrez enfin ajouter le slug correspondant à la banque à la fin de l'URL.
Voici la liste des slugs actuellement disponibles :
/creatis
: pour Créatis./mymoneybank
: pour MyMoneyBank./sygma
: pour Sygma./creditlift
: pour CréditLift./cfcal
: pour CFCAL.
Structure du payload
Les modèles
Voici un exemple de payload correctement formaté (scrollable car très long) :
{
"property": [
{
"borrowers_reference": [
0
],
"is_acquitted": 0,
"is_included_in_guarantee": 0,
"mortgage_rank": "",
"mortgage_amount": "",
"environment": "excellent",
"title_of_property": "Maison",
"patrimony": "house",
"property_type": "none",
"owner_type": "full_ownership",
"rate": "",
"standing": "normal",
"use_of_property": "main",
"initial_price": "0",
"value": "280000",
"estimate_date": "2023-04-21",
"estimated_amount": "280000",
"estimation_type": "notary",
"construction_date": "1970-01-01",
"acquisition_date": "",
"cadastral_ref": "",
"type_proof_area": "valued",
"area": "",
"address": {
"number": "",
"way_type": "",
"way_name": "",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "",
"city": "",
"country": ""
}
}
],
"borrower": [
{
"is_main": 1,
"civility": "miss",
"firstname": "Inspecteur",
"lastname": "Gadget",
"alt_firstname": "",
"legal_capacity": "capable_adult",
"is_sci_representative": 0,
"sci_share": "0",
"is_ficp": 0,
"is_fcc": 0,
"birth": {
"name": "Gadget",
"birthdate": "1967-01-18",
"nationality": "FR",
"country": "FR",
"zip_code": "97400",
"city": "SAINT-DENIS"
},
"residence": {
"residential_status": "freehold_no_sci",
"entry_date": "2001-01-01",
"owner_profil": ""
},
"address": {
"number": "20",
"way_type": "",
"way_name": "Rue des chemins",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "59400",
"city": "Cambrai",
"country": "FR"
},
"id_piece": {
"type": "none",
"number": "",
"start_date": "",
"end_date": "",
"place_of_creation": ""
},
"contact": {
"phone": [
{
"number": "+262692959273",
"usage": "personal"
}
],
"email": "rose.rouge@hotmail.fr"
},
"relation": {
"relation_type": "single",
"start_date": "2007-03-24",
"matrim_regime": "",
"separation_type": ""
},
"dependents": [
{
"gender": "male",
"name": "Roberto",
"birthdate": "2003-12-30",
"dependent_type": "dependent_child",
"family_link": "child"
}
]
}
],
"activity": [
{
"borrower_reference": "0",
"is_main": 1,
"activity": "Fonctionnaire",
"has_valid_trial_period": 1,
"employer": "EPIDE",
"activity_type": "public",
"socio_pro_category": "school_teachers_primary_school_teachers_and_similar",
"start_date": "1993-01-01",
"end_date": "",
"contract_type": "civil_servant",
"country_of_practice": "",
"has_payday_advance": 0,
"has_seizure": 0,
"siret": "",
"ape_code": "",
"address": {
"number": "",
"way_type": "",
"way_name": "Rue du Moulinel",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "",
"city": "",
"country": ""
},
"contact": {
"phone": [
{
"number": "+33327733665",
"usage": "professional"
}
],
"email": ""
}
}
],
"additional_record": {
"is_ok_for_postal_mail": 0,
"is_ok_for_tele_sales": 0
},
"bank_situation": [
{
"borrowers_reference": [
0
],
"is_main": 1,
"created_date": "2000-01-01",
"account_number": "",
"iban": "FR7619906009743000824574260",
"bic": "AGRIRERX",
"bank_name": "Credit agricole",
"bank_code": "credit_agricole",
"beginning_balance": "0",
"ending_balance": "2796.24",
"exceptionals_expenses": "0",
"number_months_account_statements": "3",
"exceptionals_incomes": "0",
"credit_card": "none",
"revolving_credit_release_amount": "0",
"revolving_credit_release_amount_used_m1": "0",
"revolving_credit_release_amount_used_m2": "0",
"revolving_credit_release_amount_used_m3": "0",
"number_of_rejects": "0",
"number_of_regularized_rejections": "0",
"total_unpaid_months": "0",
"mortgage_unpaid_months": "0",
"mortgage_unpaid_regularized": "0",
"total_unpaid_not_regularized": "0",
"mortgage_unpaid_not_regularized": "0",
"last_month_total_unpaid_not_regularized": "0",
"last_month_mortgage_unpaid_not_regularized": "0",
"has_late_rent": 0,
"has_increase_or_delay_income_tax": 1,
"has_bailiff_or_collection_company": 0,
"has_other_delay": 0,
"has_intervention_committee": 0,
"saving_type": "",
"saving_amount": ""
}
],
"credit": [
{
"borrowers_reference": [
0
],
"nature_of_loan": "non_mortgage_personal_loan",
"sub_type": "",
"loan_reference": "RP220600881",
"nature_of_info": "not_disclosed",
"start_date": "2022-08-05",
"periodic_amount": "137.77",
"periodicity": "monthly",
"creditor_name": "SOREFI",
"creditor_code": "sorefi",
"bank_name": "",
"account_number": "",
"account_owner": "",
"is_to_be_kept": 0,
"is_already_redeeming": 0,
"nominal_rate": "8",
"early_repayment_noticeperiod": "",
"init_cap": "7000",
"res_term_month": "40",
"init_term_month": "48",
"report_term_month": "0",
"release_fees": "0",
"is_with_notice": 0,
"notice_period": "0",
"is_already_covered": 0,
"nature_of_consumer_good": "",
"remaining_capital_due": "4301.05",
"arl_repay_fees": "0",
"pieces": {
"contract": 0,
"amortization_table": 0,
"addendum": 0,
"account_statements": 0
},
"address": {
"number": "1",
"way_type": "RUE",
"way_name": "de la banque",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "75002",
"city": "Paris",
"country": "FR"
}
},
{
"borrowers_reference": [
0
],
"nature_of_loan": "non_mortgage_personal_loan",
"sub_type": "",
"loan_reference": "81015766112",
"nature_of_info": "not_disclosed",
"start_date": "2020-01-01",
"periodic_amount": "254.58",
"periodicity": "monthly",
"creditor_name": "Sedef",
"creditor_code": "sedef",
"bank_name": "",
"account_number": "",
"account_owner": "",
"is_to_be_kept": 0,
"is_already_redeeming": 0,
"nominal_rate": "10",
"early_repayment_noticeperiod": "",
"init_cap": "15000",
"res_term_month": "56",
"init_term_month": "96",
"report_term_month": "0",
"release_fees": "0",
"is_with_notice": 0,
"notice_period": "0",
"is_already_covered": 0,
"nature_of_consumer_good": "",
"remaining_capital_due": "5295.88",
"arl_repay_fees": "0",
"pieces": {
"contract": 0,
"amortization_table": 0,
"addendum": 0,
"account_statements": 0
},
"address": {
"number": "1",
"way_type": "RUE",
"way_name": "de la banque",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "75002",
"city": "Paris",
"country": "FR"
}
},
{
"borrowers_reference": [
0
],
"nature_of_loan": "revolving_credit",
"sub_type": "",
"loan_reference": "530 053 547 90",
"nature_of_info": "not_disclosed",
"start_date": "2021-01-01",
"periodic_amount": "46.61",
"periodicity": "monthly",
"creditor_name": "Sedef",
"creditor_code": "sedef",
"bank_name": "",
"account_number": "",
"account_owner": "",
"is_to_be_kept": 0,
"is_already_redeeming": 0,
"nominal_rate": "20",
"early_repayment_noticeperiod": "",
"init_cap": "3000",
"res_term_month": "69",
"init_term_month": "96",
"report_term_month": "0",
"release_fees": "0",
"is_with_notice": 0,
"notice_period": "0",
"is_already_covered": 0,
"remaining_capital_due": "666.83",
"arl_repay_fees": "0",
"pieces": {
"contract": 0,
"amortization_table": 0,
"addendum": 0,
"account_statements": 0
},
"address": {
"number": "1",
"way_type": "RUE",
"way_name": "de la banque",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "75002",
"city": "Paris",
"country": "FR"
}
}
],
"debt": [
{
"borrowers_reference": [
0
],
"nature_of_debt": "private_debt",
"debt_reference": "598526655ADDSSS55488",
"remaining_capital_due": "6340.4",
"start_date": "2019-02-05",
"periodic_amount": "870",
"creditor_name": "Autre Retard",
"creditor_code": "other",
"is_to_be_kept": 0,
"third_signatories": "",
"init_cap": "20000",
"res_term_month": "8",
"init_term_month": "59",
"address": {
"number": "1",
"way_type": "RUE",
"way_name": "de la banque",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "75002",
"city": "Paris",
"country": "FR"
}
},
{
"borrowers_reference": [
0
],
"nature_of_debt": "income_tax",
"debt_reference": "BSF 2504",
"remaining_capital_due": "12015.5",
"start_date": "2023-04-19",
"periodic_amount": "200",
"creditor_name": "Tresor Public",
"creditor_code": "tresor_publique",
"is_to_be_kept": 0,
"third_signatories": "",
"init_cap": "12015.5",
"res_term_month": "60",
"init_term_month": "60",
"address": {
"number": "1",
"way_type": "RUE",
"way_name": "de la banque",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "75002",
"city": "Paris",
"country": "FR"
}
}
],
"income": [
{
"borrowers_reference": [
0
],
"periodic_amount": "4144.13",
"income_type": "salary",
"periodicity": "monthly",
"is_permanent": 1,
"start_date": "",
"end_date": ""
}
],
"charge": [],
"financing": {
"total_duration": "84",
"deprecation_type": "linear",
"periodicity": "monthly",
"rate_type": "fixed",
"remuneration_type": "commissionIOBSP",
"is_with_guarantee": 0,
"courtage_fees_amount": "1938",
"courtage_fees_rate": "5.5",
"notary_name": "",
"insurance": [
{
"borrower_reference": "0",
"insurer_identifier": "mutlog",
"type_of_insurance_capital": "initial_capital",
"type": "insurance_group",
"formula": "dc_ptia_itt",
"rate": "100"
}
],
"treasury": [
{
"cashflow_type": "comfort_treasury",
"cashflow_duration": "84",
"cashflow_amount": "4000"
}
],
"notary_address": {
"number": "",
"way_type": "",
"way_name": "",
"complement": "",
"place_known_as": "",
"floor": "",
"zip_code": "",
"city": "",
"country": ""
},
"product": {
"contributor_business_code": "",
"contributor_code": "",
"vendor_code": "",
"commercial_offer_code": "",
"product_code": "",
"sub_product_code": "",
"nature_of_property_code": "",
"order_form_reference": "",
"delivery_date": "",
"property_value": "310000",
"monthly_with_insurance": "1508.96",
"scale_code": "",
"number_due_day": "30"
}
}
}
L'idée de ce document n'est pas de détailler toutes les propriétés qui devront être présentes dans votre payload mais d'apporter des précisions complémentaires à la documentation autogénérée par le manageur de Keyfast Gateways.
La structure du payload de chaque dossier repose sur l'existence de plusieurs clés principales que nous qualifions de modèles.
Par exemple, le CommonModel
représente le payload en son intégralité et le BorrowerModel
représente une sous clé borrower
.
À droite de cette sous-section, nous vous fournissons un exemple de payload correctement formaté afin que vous puissiez mieux comprendre ce système.
Certains modèles comme le AddressModel
sont des sous clés qui pourront apparaitre plusieurs fois dans votre payload et à différents endroits (par exemple en tant que sous clé de borrower
ou de notary
). L'intérêt de cette pratique est que chacune des définitions d'une adresse possède une structure identique à l'autre.
Cardinalité des propriétés
Exemple d'une propriété non obligatoire et vide :
{
"property": []
}
Sur certaines propriétés du payload, vous pourrez observer qu'il existe un astérisque. La présence de ce dernier détermine l'obligation ou non de renseigner la propriété.
Dans cet exemple, l'emprunteur doit à chaque fois posséder un attribut is_main
pour que l'API de Keyfast Gateways puisse déterminer s'il s'agit de l'emprunteur principal ou non.
En revanche, un emprunteur n'est pas dans l'obligation d'être propriétaire. Par conséquent, la propriété property
peut être un tableau vide.
Il arrivera souvent qu'il soit imposé le fait de renseigner une propriété pour une ou plusieurs banques :
Dans cet exemple, la clé is_permanent
n'est obligatoire que si vous envoyez le dossier à CFCAL (Required field for CFCAL.
). Vous pouvez l'omettre pour les autres banques.
Spécificités de certaines listes
Certaines propriétés de type string
ne permettent pas une saisie libre et imposent de choisir parmi une liste de valeurs possibles.
Ces listes sont généralement valables pour toutes les banques.
Les données optionnelles
Un modèle d'options a été intégré à notre API depuis sa version 1.5.
Ce dernier vous permet d'ajouter des données supplémentaires nécessaires à la bonne execution de la requête.
Cette section a pour but de préciser tous les cas d'application pour lesquels ce modèle vous sera utile et comment l'utiliser convenablement.
Gestion des doublons Créatis
Exemple d'un retour de doublon Créatis :
{
"status": false,
"level": "Bank",
"errors": "Aborted injection by bank API",
"identifier": "cae1e793-de1f-4a1f-a4da-768ade7b9b6d",
"details": {
"message": "It seems that one of the borrowers (or both of them) is already known by Créatis. Please resubmit your payload with the necessary additional information (refer to the documentation for more details).",
"request_id": "2023-02-15-09.25.53.823402",
"known_borrowers": {
"borrower": [
{
"id": "7B6C674244E8BB689955D627CDF742B8B264E32249DD786F4838013A70F7DF2C",
"birthname": "ELLESSEDEUXGO",
"firstname": "RECETTE",
"birthdate": "19721107",
"birthcity": "BETHUNE"
}
],
"co_borrower": [
{
"id": "5B3BA792099910F11B9D372D1A40D18DF807D6A88BB33B2BB6E4DB4C06365A3C",
"birthname": "GRANIE",
"firstname": "JULIE",
"birthdate": "19800510",
"birthcity": "SAINT DENIS"
}
]
}
}
}
Exemple de contenu de la clé
options
à ajouter à votre prochaine requête après le retour de Créatis précédent :
{
"options": {
"complement": {
"request_id": "2023-02-15-09.25.53.823402",
"known_borrowers": [
{
"borrower_reference": "0",
"creatis_id": "7B6C674244E8BB689955D627CDF742B8B264E32249DD786F4838013A70F7DF2C"
},
{
"borrower_reference": "1",
"creatis_id": "5B3BA792099910F11B9D372D1A40D18DF807D6A88BB33B2BB6E4DB4C06365A3C"
}
]
}
}
}
Créatis check si l'emprunteur ou le coemprunteur n'est/ne sont pas déjà connu(es) de leurs services.
Le dossier peut se voir refusé pendant l'étape d'injection pour cette raison et nécessite donc de choisir parmi une liste de tiers au préalable avant de renvoyer la requête en intégralité avec un identifiant permettant de raccrocher la nouvelle requête à la demande initiale.
Vous trouverez à droite un exemple de retour de l'API de Keyfast Gateways dans le pire des cas : Créatis a détecté 2 doublons (emprunteur et coemprunteur), et un exemple de données additionnelles à ajouter à votre nouvelle requête pour régler ce problème.
Dans cette situation, le contenu de details
est d'une importance capitale :
request_id
est un identifiant communiqué par Créatis qui vous sera indispensable pour la nouvelle requête.known_borrowers
représente un tableau d'emprunteurs déjà connus parmi lesquels Créatis nous impose de choisir. Leursid
respectifs devront être conservés et renvoyés, les autres informations ne sont communiquées que pour permettre à l'opérateur de faire son choix.
Dans cette situation, il suffira d'ajouter en options de votre payload les informations nécessaires pour permettre à Créatis de passer en mode séléction et d'accepter le dossier tel que dans l'exemple qui vous est communiqué.
Si tout s'est bien passé, le retour de la banque sera alors un retour positif classique.
Réponse
Structure
Exemple d'un retour positif de la part de MyMoneyBank :
{
"status": true,
"level": "Bank",
"message": {
"eligible": true,
"processus": "standard",
"processusExpertise": "NA",
"ratioHypothecaire": "0",
"mtEstimationsBiens": {
"devise": "EUR",
"valeur": "0"
}
}
}
Keyfast Gateways vous retournera toujours un JSON avec au moins deux clés :
status
(true
oufalse
) : indique si l'envoi des données s'est bien déroulé.level
(KeyfastGateways
ouBank
) : précise de quelle application provient la réponse finale.
Dans certains cas, Keyfast Gateways y ajoutera les clés :
message
: dans lequel est stockée la réponse brute de la banque cible en cas de réussite.errors
: une liste de messages d'erreur vous indiquant potentiellement ou se situe le problème dans votre payload.details
: il arrive que Keyfast Gateways vous communique des détails (souvent des incohérences métier) bloquantes au niveau des banques grâce à cette clé.identifier
: un identifiant de debug que vous pouvez nous fournir sur Slack pour vous aider à debugger. Il nous permettra en effet de retrouver plus facilement les informations relatives à votre payload.
Erreurs
Exemple d'un retour d'erreur 400 :
{
"status": false,
"level": "KeyfastGateways",
"errors": [
{
"path": "debt[0].periodic_amount",
"error": "The periodic debt amount is required"
},
{
"path": "debt[0].is_to_be_kept",
"error": "The debt must be kept or redeemed but cannot be null"
}
],
"identifier": "b97146ce-fb39-47a6-8cf4-b8e89f8fcdb5"
}
Ici,
debt
est la clé et[0]
une référence de tableau. Ces messages signifient donc que pour la dette déclarée en premier, les champsperiodic_amount
etis_to_be_kept
n'ont pas été, ou du moins pas correctement, renseignés.
Voici les différentes erreurs que l'API de Keyfast Gateways pourraient vous retourner ainsi que le comportement à adopter en fonction de chacune :
Code | Explication |
---|---|
400 | Bad Request -- Votre requête est invalide. |
401 | Unauthorized -- Votre token d'accès ou vos identifiants est/sont invalide(s). |
403 | Forbidden -- Un identifiant bancaire rattaché à votre compte pour le partenaire ciblé est inexistant. |
404 | Not Found -- Vous appelez une route qui n'existe pas. |
405 | Method Not Allowed -- Vous n'utilisez pas la bonne méthode de requête HTTP. |
500 | Internal Server Error -- Contactez nous via votre canal slack dédié. |