Fortuneo (com.fortuneo.android)

Android App for french bank Fortuneo. Uses Apache Thrift for most client to server communication.

Also used by parent company, Credit Mutuel Arkea: https://docplayer.fr/13057782-Apache-thrift-soa-legere-retour-d-experience.html

BuildConfig

public final class BuildConfig {  
    public static final String APPLICATION_ID = "com.fortuneo.android";  
    public static final String BUILD_TYPE = "prod";  
    public static final boolean DEBUG = false;  
    public static final String FTO_API_KEY = "Jg8HUU2jexfdbpbTFJXFHPEEY0kZf9va";  
    public static final int VERSION_CODE = 3184;  
    public static final String VERSION_NAME = "9.5.2";  
}

API Endpoints

<string name="fortuneo_api_banque">https://api.fortuneo.com/bank/v1</string>  
<string name="fortuneo_api_carte">https://api.fortuneo.com/card-api/v1/</string>  
<string name="fortuneo_api_key">Jg8HUU2jexfdbpbTFJXFHPEEY0kZf9va</string>  
<string name="fortuneo_api_security">https://api.fortuneo.com/security/</string>  
<string name="fortuneo_hostname">www.fortuneo.fr</string>  
<string name="fortuneo_url_alertebanque">https://api.fortuneo.fr/passerelle/1/alertebanquesecure/</string>  
<string name="fortuneo_url_alertebourse">https://api.fortuneo.fr/passerelle/1/alertebourse/</string>  
<string name="fortuneo_url_alertepassageordre">https://api.fortuneo.fr/passerelle/1/alertepassageordresecure/</string>  
<string name="fortuneo_url_alertesecure">https://api.fortuneo.fr/passerelle/3/alertesecure/</string>  
<string name="fortuneo_url_assurance_vie">https://api.fortuneo.fr/passerelle/2/assuranceviesecure</string>  
<string name="fortuneo_url_cartevirtuelle">https://api.fortuneo.fr/passerelle/2/cartevirtuellesecure/</string>  
<string name="fortuneo_url_compte">https://api.fortuneo.fr/passerelle/1/comptesecure/</string>  
<string name="fortuneo_url_compteaterme">https://api.fortuneo.fr/passerelle/1/compteatermesecure</string>  
<string name="fortuneo_url_compteexternesecure_2">https://api.fortuneo.fr/passerelle/2/compteexternesecure/</string>  
<string name="fortuneo_url_contact">https://api.fortuneo.fr/passerelle/1/contactsecure</string>  
<string name="fortuneo_url_credit_immobilier">https://api.fortuneo.fr/passerelle/1/creditimmobiliersecure</string>  
<string name="fortuneo_url_editique">https://api.fortuneo.fr/passerelle/1/editiquesecure</string>  
<string name="fortuneo_url_faq">https://api.fortuneo.fr/passerelle/1/faq/</string>  
<string name="fortuneo_url_geogab">https://api.fortuneo.fr/passerelle/1/geogab/</string>  
<string name="fortuneo_url_indice">https://api.fortuneo.fr/passerelle/1/indice/</string>  
<string name="fortuneo_url_liste_perso">https://api.fortuneo.fr/passerelle/1/listeperso/</string>  
<string name="fortuneo_url_livret">https://api.fortuneo.fr/passerelle/1/livretsecure/</string>  
<string name="fortuneo_url_messagerie">https://api.fortuneo.fr/passerelle/1/messageriesecure</string>  
<string name="fortuneo_url_mobilite">https://mabanque.fortuneo.fr/changer-de-banque/#jwt_token=%1$s&amp;access_token=%2$s</string>  
<string name="fortuneo_url_mobilite_detail_annulation">https://mabanque.fortuneo.fr/changer-de-banque/suivi/%1$s/detail#jwt_token=%2$s&amp;access_token=%3$s</string>  
<string name="fortuneo_url_mobilite_detail_demande_signature">https://mabanque.fortuneo.fr/changer-de-banque/mon-recapitulatif/%1$s#jwt_token=%2$s&amp;access_token=%3$s</string>  
<string name="fortuneo_url_news">https://api.fortuneo.fr/passerelle/1/news/</string>  
<string name="fortuneo_url_operationsecure">https://api.fortuneo.fr/passerelle/1/operationsecure/</string>  
<string name="fortuneo_url_operationsecure_2">https://api.fortuneo.fr/passerelle/2/operationsecure/</string>  
<string name="fortuneo_url_ordre">https://api.fortuneo.fr/passerelle/1/ordresecure/</string>  
<string name="fortuneo_url_partenaire">https://api.fortuneo.fr/passerelle/1/partenaire/acces/</string>  
<string name="fortuneo_url_partenaire_banque">https://api.fortuneo.fr/passerelle/1/partenaire/banque/</string>  
<string name="fortuneo_url_partenaire_banque_anr">https://api.fortuneo.fr/passerelle/2/partenaire/banque/</string>  
<string name="fortuneo_url_partenaire_banque_anr_2">https://api.fortuneo.fr/passerelle/4/partenaire/banque/</string>  
<string name="fortuneo_url_portefeuille">https://api.fortuneo.fr/passerelle/1/portefeuillesecure/</string>  
<string name="fortuneo_url_portefeuillefictif">https://api.fortuneo.fr/passerelle/1/portefeuillefictif/</string>  
<string name="fortuneo_url_recherche">https://api.fortuneo.fr/passerelle/1/recherche/</string>  
<string name="fortuneo_url_securiteforte">https://api.fortuneo.fr/passerelle/1/securiteforte</string>  
<string name="fortuneo_url_securiteforte_2">https://api.fortuneo.fr/passerelle/2/securiteforte</string>  
<string name="fortuneo_url_synthese">https://api.fortuneo.fr/passerelle/1/synthese/</string>  
<string name="fortuneo_url_valeur">https://api.fortuneo.fr/passerelle/1/valeur/</string>
<string name="google_api_key">AIzaSyCQSusk2pJSx1dMlsn5XwlbdZvPNKAiIk4</string>  
<string name="google_app_id">1:206640500824:android:e86b83dfc8be62c9</string>  
<string name="google_crash_reporting_api_key">AIzaSyCQSusk2pJSx1dMlsn5XwlbdZvPNKAiIk4</string>
<string name="google_maps_api_key">AIzaSyDCpWD77rtHekx9jT8WUpEur9XxHoE2zIY</string>
<string name="newrelic_token">AAed5e9e04f374f83da48a438c0e7750aa1e5c2a22</string>
<string name="url_about_cg">https://mabanque.fortuneo.fr/datas/files/fortuneo_cg.pdf</string>  
<string name="url_about_legal_notice">https://www.fortuneo.fr/mentions-legales-avertissement-legal?iframe=true</string>  
<string name="url_about_price">https://mabanque.fortuneo.fr/datas/files/tarifs_fortuneo.pdf</string>  
<string name="url_about_price_info">https://mabanque.fortuneo.fr/datas/files/document-information-tarifaire.pdf</string>  
<string name="url_about_privacy">https://mabanque.fortuneo.fr/datas/files/politique-de-confidentialite.pdf</string>  
<string name="url_app_version">https://api.fortuneo.com/mobile-infos</string>  
<string name="url_become_client">https://www.fortuneo.fr/compte-bancaire/ouvrir-un-compte/type-compte-courant?utm_source=ftno&amp;utm_medium=appli&amp;utm_campaign=cta_ouverture</string>  
<string name="url_card_concierge_service">https://fortuneo.gconcierges.com/</string>  
<string name="url_changement_mandat_assurance_vie">https://mabanque.fortuneo.fr/fr/prive/mes-comptes/assurance-vie/changement-mandat.jsp</string>  
<string name="url_garantie_assistance">https://assurance-carte.europ-assistance.fr</string>  
<string name="url_maintenance">https://mabanque.fortuneo.fr/placements/webstore/application-android-2/maintenance.html</string>  
<string name="url_note_opposition_carte">https://mabanque.fortuneo.fr/WebStore/application-android-2/note-opposition-carte.html</string>  
<string name="url_note_opposition_cheque">https://mabanque.fortuneo.fr/WebStore/application-android-2/note-opposition-cheque.html</string>  
<string name="url_opposition">https://mabanque.fortuneo.fr/WebStore/application-android-2/opposition_cb.html</string>  
<string name="url_privacy_policy">https://www.fortuneo.fr/mentions-legales-avertissement-legal/depot-cookies-information?iframe=true</string>  
<string name="url_products_list">https://mabanque.fortuneo.fr/placements/webstore/application-mobile/cms.json</string>  
<string name="url_profil_vie_dynamique">https://mabanque.fortuneo.fr/WebStore/application-android-2/profil-dynamique.html</string>  
<string name="url_profil_vie_dynamique_nouveau">https://mabanque.fortuneo.fr/WebStore/application-android-2/profil-dynamique-nouveau.html</string>  
<string name="url_profil_vie_equilibre">https://mabanque.fortuneo.fr/WebStore/application-android-2/profil-equilibre.html</string>  
<string name="url_profil_vie_equilibre_nouveau">https://mabanque.fortuneo.fr/WebStore/application-android-2/profil-equilibre-nouveau.html</string>  
<string name="url_profil_vie_prudent">https://mabanque.fortuneo.fr/WebStore/application-android-2/profil-prudent.html</string>  
<string name="url_profil_vie_prudent_nouveau">https://mabanque.fortuneo.fr/WebStore/application-android-2/profil-prudent-nouveau.html</string>  
<string name="url_profil_vie_securitaire">https://mabanque.fortuneo.fr/WebStore/application-android-2/profil-securitaire.html</string>  
<string name="url_reseau_lent">https://mabanque.fortuneo.fr/WebStore/application-mobile/speedtest/1MB.zip</string>  
<string name="url_service_patrimonial">https://www.fortuneo.fr/service-patrimonial</string>  
<string name="url_streaming_bourse_websocket">https://mabanque.fortuneo.fr/rtstreaming/quotes/websocket/</string>  
<string name="url_svi_visuel">https://ich-client-sdk.prod.dial-once.com/?apiKey=167d9fe0-1eb6-439e-b1be-b92034a002c1&amp;method=clicktohubwidget</string>  
<string name="url_youtube_video">https://www.youtube.com/v/</string>  
<string name="url_youtube_video_thumbnail">https://img.youtube.com/vi/</string>  
<string name="user_agent">Fortuneo-%1$s/%2$s %3$s</string>
<string name="website_hostname">www.mabanque.fortuneo.fr</string>  
<string name="website_url">https://mabanque.fortuneo.fr</string>
<string name="account_popup_demo_mode_identifier">0102001045</string>  
<string name="account_popup_demo_mode_password">fortuneo</string>
<string name="anrlib_oauth_url">http://serveuroauth.rec.s.arkea.com:8080/serveuroauth</string>  
<string name="anrlib_securityapi_url">http://192.168.56.1:8080/securityapi</string>  
<string name="answer_later">Plus tard</string>  
<string name="api_account_rules">https://api.fortuneo.com/account-rules/v1</string>  
<string name="api_accounts">https://api.fortuneo.com/account-api/v2</string>  
<string name="api_consent_no_oauth">https://api.fortuneo.com/consentapinoauth</string>  
<string name="api_customer">https://api.fortuneo.com/customer/v1</string>  
<string name="api_event_service">https://api.fortuneo.com/events/v1</string>  
<string name="api_financial_instruments">https://api.fortuneo.com/financial-instruments/v1</string>  
<string name="api_institutional">https://api.fortuneo.com/institutional/v1</string>  
<string name="api_life_insurance">https://api.fortuneo.com/life-insurance/v1</string>  
<string name="api_market">https://api.fortuneo.com/market/v1</string>  
<string name="api_payment">https://api.fortuneo.com/payment-api/v1</string>  
<string name="api_paymentvalidation">https://api.fortuneo.com/dsp2-payment-validation-api</string>  
<string name="api_person">https://api.fortuneo.com/person/v1</string>  
<string name="api_providers">https://api.fortuneo.com/provider-api/v1</string>  
<string name="api_sponsorship">https://api.fortuneo.com/sponsorship-api/v1</string>  
<string name="api_subscription">https://api.fortuneo.com/subscription/v2</string>  
<string name="api_tpprepository">https://api.fortuneo.com/tpprepositoryapi</string>

Security API Endpoints

public class SecurityApiPaths {  
    public static final String ACCESSRECOVERY = "access/recovery";  
    public static final String ACTIVATECARDREADER = "cardReader/activate";  
    public static final String AUTHENTICATE = "authenticate";  
    public static final String CANCEL_PENDING = "enrollment/cancelPending";  
    public static final String CHANGEMENT_ESPACE = "/changeSpace";  
    public static final String CHECKFINGERPRINT = "deviceFingerprinting/checkFingerPrint";  
    public static final String CHECK_OATH = "mobileStrongAuth/checkOATH";  
    public static final String CHECK_USER = "checkuser";  
    public static final String DEVICE_BIOMETRY = "device-biometry";  
    public static final String DEVICE_BIOMETRY_OFF = "device/biometry/disabled";  
    public static final String DEVICE_BIOMETRY_ON = "device/biometry/enabled";  
    public static final String ENROLLMENT_ALLOWED = "allowed-enrollments";  
    public static final String ENROLLMENT_GET_DEVICES = "enrollment/devices";  
    public static final String ENROLLMENT_GET_PUBLIC_KEY_STATUS = "enrollment/public-key/status";  
    public static final String ENROLLMENT_GET_STATUS = "enrollment/getEnrollmentStatus";  
    public static final String ENROLLMENT_GET_STATUS_NOAUTH = "enrollment-status-noauth";  
    public static final String ENROLLMENT_GET_STATUS_NOT_AUTHENTIFIED = "enrollmentStatus/getEnrollmentStatus";  
    public static final String ENROLLMENT_REQUEST = "enrollment/requestSeed";  
    public static final String ENROLLMENT_SEND_BANKCARD_SMS = "enrollment/sendBankcardEnrollmentSms";  
    public static final String ENROLLMENT_VALIDATE = "enrollment/validateSeed";  
    public static final String ENROLLMENT_VALIDATE_PUBLIC_KEY = "enrollment/public-key";  
    public static final String EXTERNALHISTORY = "external-history";  
    public static final String GENERATE_CHALLENGE = "generateChallenge";  
    public static final String GETACCESHISTORY = "accesHistory";  
    public static final String GETFINGERPRINT = "deviceFingerprinting/getFingerPrint";  
    public static final String GETINFOSACCES = "infosAcces";  
    public static final String GETINFOSBANKCARD = "bankCard/infos";  
    public static final String GETINFOSCARDREADER = "cardReader/infos";  
    public static final String GETINFOSPILOTE = "canari/infosPilote";  
    public static final String GET_ACCESS_CODE = "person/accessCode";  
    public static final String GET_ALL_APPLICATIONS = "applications";  
    public static final String GET_AUTHENTICATION_MODE = "person/authenticationMode";  
    public static final String GET_BIOMETRY_STATUS = "device/biometry/status";  
    public static final String GET_COORDONNEES = "person/coordonnees";  
    public static final String GET_LIST_DEVICES = "getListDevices";  
    public static final String GET_PERSON = "person";  
    public static final String HAS_DEVICE = "hasDevice";  
    public static final String JWT_TOKEN = "jwt-token";  
    public static final String KEEPALIVE = "keepalive";  
    public static final String MOBILE_STRONG_AUTH = "mobileStrongAuth/validate";  
    public static final String MODIFY_DEVICE = "modifyDevice";  
    public static final String MODIFY_MCODE = "modifyMcode";  
    public static final String MODIFY_MCODE_V2 = "device/mcode";  
    public static final String MODIFY_SERIALNUMBER_DEVICE = "device/serialNumber";  
    public static final String NETWORKTIME = "/time";  
    public static final String OPERATIONRIB = "operation/rib";  
    public static final String OPERATION_GENERATE_SEED = "operation/generateSeed";  
    public static final String OPERATION_GENERATE_SEED_RENEW = "operation/generateSeedForTokenRenewal";  
    public static final String OPERATION_GET_OPERATION_DATAS = "operation/{pathId}/params";  
    public static final String OPERATION_INITIATE_SENSITIVE_OPERATION = "operation";  
    public static final String OTPAUTHENTICATE = "otp/authenticate";  
    public static final String OTPGENERATE = "otp/generate";  
    public static final String OTPVALIDATE = "otp/validate";  
    public static final String PASSWORD = "password";  
    public static final String PASSWORD_HASH = "password/hash/{si}/{efs}/{access}";  
    public static final String PASSWORD_RECOVERY = "password/recovery";  
    public static final String PASSWORD_STRENGTH = "password/checkStrength";  
    public static final String PENDING_TOKENS = "pendingTokens";  
    public static final String REINIT_MCODE = "device/reinitmcode";  
    public static final String REVOKE_DEVICE = "revokeSeedDevice";  
    public static final String REVOKE_REQUEST = "revoke";  
    public static final String SEED_FOR_NEW_PENDING = "enrollment/requestSeedForNewPending";  
    public static final String SEND_NEW_SEED_TO_ENROLLED_DEVICES = "enrollment/sendNewSeedToAlreadyEnrolledDevice";  
    public static final String STORE_BIOMETRY_SECRET = "device/biometry/secret";  
    public static final String TOKEN = "token";  
    public static final String TOKENS = "tokens";  
    public static final String TOTP_BASED_AUTHENTICATION = "oath/authenticate";  
    public static final String TRIGGERXCANAL = "operation/{id}/xcanal";  
    public static final String VALIDATEXCANALOPERATION = "xcanal-operation";  
    public static final String XCANAL_AUTHENTICATION = "xcanal-authenticate";  
}

getInfosMobiles

private String getInfosMobiles() {  
    if (infosMobile == null) {  
        try {  
            StringBuilder sb = new StringBuilder();  
            sb.append(Constants.FirelogAnalytics.SDK_PLATFORM_ANDROID);  
            sb.append(",");  
            sb.append(Build.VERSION.RELEASE);  
            sb.append(",");  
            sb.append(Build.VERSION.SDK_INT);  
            sb.append(",");  
            sb.append(Build.MANUFACTURER);  
            sb.append(",");  
            sb.append(Build.MODEL);  
            sb.append(",");  
            PackageInfo packageInfo = this.context.getPackageManager().getPackageInfo(this.context.getPackageName(), 0);  
            sb.append(packageInfo.versionName);  
            sb.append(",");  
            sb.append(packageInfo.versionCode);  
            infosMobile = sb.toString();  
        } catch (Exception unused) {  
        }  
    }  
    return infosMobile;  
}

API Error codes

public static final String CD_ERR_ADRESSE_NPAI = "BACKEND_2070";  
public static final String CD_ERR_ANNULATION_REPONSE_OST_KO = "BACKEND_2176";  
public static final String CD_ERR_AUTHENTIFICATION_FORTE_NON_VALIDEE = "BACKEND_2325";  
public static final String CD_ERR_CAT_AUCUN_COMPTE_LIGIBLE = "BACKEND_2180";  
public static final String CD_ERR_CAT_AUCUN_TAUX_COMMERCIALISABLE = "BACKEND_2182";  
public static final String CD_ERR_CAT_PERSONNE_NON_AUTORISEE = "BACKEND_2181";  
public static final String CD_ERR_CAT_PERSONNE_NON_ELIGIBLE = "BACKEND_2179";  
public static final String CD_ERR_CODE_ACCES_COTITULAIRE = "BACKEND_2090";  
public static final String CD_ERR_CODE_PROMO_EXPIRE = "BACKEND_2101";  
public static final String CD_ERR_CODE_PROMO_INVALIDE = "BACKEND_2102";  
public static final String CD_ERR_CODE_SECRET_INCORRECT = "BACKEND_2087";  
public static final String CD_ERR_COMPTE_BOURSE_OBLIGATOIRE = "BACKEND_2127";  
public static final String CD_ERR_COMPTE_NON_TROUVE = "OPERATION_DIVERSES_COMPTE_NON_TROUVE";  
public static final String CD_ERR_CREER_ANNULER_OST_FERMER = "BACKEND_2183";  
public static final String CD_ERR_DEBUT_OST_KO = "BACKEND_2177";  
public static final String CD_ERR_DEPLAFONNEMENT_CARTE_EN_OPPOSITION = "BACKEND_0104";  
public static final String CD_ERR_DEPLAFONNEMENT_CLIENT_NON_ELIGIBLE = "BACKEND_0100";  
public static final String CD_ERR_DEPLAFONNEMENT_COTATION_BALE_INSUFFISANT = "BACKEND_0101";  
public static final String CD_ERR_DEPLAFONNEMENT_DEMANDE_EXISTANTE = "BACKEND_0105";  
public static final String CD_ERR_DEPLAFONNEMENT_EN_COURS_GLOBAL_INSUFFISANT = "BACKEND_0102";  
public static final String CD_ERR_DEPLAFONNEMENT_NB_MAX_ATTEINT = "BACKEND_0103";  
public static final String CD_ERR_DETAIL_OST_KO = "BACKEND_2173";  
public static final String CD_ERR_DETAIL_REPONSE_OST_KO = "BACKEND_2175";  
public static final String CD_ERR_ECHEANCE_OST_KO = "BACKEND_2178";  
public static final String CD_ERR_EMAIL = "BACKEND_2071";  
public static final String CD_ERR_ENREGISTREMENT_REPONSE_OST_KO = "BACKEND_2174";  
public static final String CD_ERR_FCT_ENROLEMENT_AUCUN_NUMERO_PORTABLE_TROUVE = "BACKEND_2237";  
public static final String CD_ERR_FCT_ENROLEMENT_AUCUN_NUMERO_TEL_TROUVE = "BACKEND_2236";  
public static final String CD_ERR_FIND_CARTE_ACTIVABLE = "PACMAN_369";  
public static final String CD_ERR_FORBIDDEN = "BACKEND_403";  
public static final String CD_ERR_FUNC_ABSENCE_RESULTAT_REQUETE = "BACKEND_2166";  
public static final String CD_ERR_FUNC_ANCIENNETE_COMPTE = "BACKEND_2217";  
public static final String CD_ERR_FUNC_ASSURANCEVIE_TELEPHONE_NON_AUTORISE = "BACKEND_2222";  
public static final String CD_ERR_FUNC_AUTHENTIFICATION_FERMEE = "BACKEND_2326";  
public static final String CD_ERR_FUNC_AVIS_DEPOT_INVALIDE = "BACKEND_2113";  
public static final String CD_ERR_FUNC_AVIS_OPERE = "BACKEND_2061";  
public static final String CD_ERR_FUNC_BORNE_VERSEMENT_INITIAL = "BACKEND_2135";  
public static final String CD_ERR_FUNC_BORNE_VERSEMENT_PROGRAMME = "BACKEND_2137";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_ACCES_SUSPENDU = "BACKEND_2320";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_ANR = "BACKEND_2309";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_AUCUNE_CARTE_REELLE_ELIGIBLE = "BACKEND_2214";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_AUCUNE_CARTE_VIRTUELLE = "BACKEND_2215";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_AUCUN_ACHAT = "BACKEND_2216";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_BLOCAGE = "BACKEND_2310";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CARTE_REELLE_INCONNUE = "BACKEND_2190";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CARTE_REELLE_VIDE = "BACKEND_2193";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CARTE_VIRTUELLE_INCONNUE = "BACKEND_2213";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CODE_EFS_VIDE = "BACKEND_2206";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CODE_SECRET_INCORRECT = "BACKEND_2319";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CODE_SI_VIDE = "BACKEND_2205";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CONTRAT_CARTE_VIDE = "BACKEND_2196";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_CONTRAT_CARTE_VIRTUELLE_VIDE = "BACKEND_2212";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_DATE_EXP_CARTE_REELLE_VIDE = "BACKEND_2195";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_DATE_EXP_CARTE_VIRTUELLE_VIDE = "BACKEND_2194";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_DEMANDE_BLOCAGE = "BACKEND_2322";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_DUREE_INCORRECTE = "BACKEND_2207";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_MDP_INCORRECT = "BACKEND_2318";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_MONTANT_INCORRECT = "BACKEND_2208";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_NON_IDENTIFIEE = "BACKEND_2210";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_NO_ANR = "BACKEND_2308";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PERSONNE_INCONNUE = "BACKEND_2192";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PLAFOND_MONTANT_NON_NUL = "BACKEND_2204";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PLAFOND_MONTANT_NUL = "BACKEND_2203";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PLAFOND_MONTANT_VIDE = "BACKEND_2202";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PLAFOND_UTILISATION_NON_NUL = "BACKEND_2201";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PLAFOND_UTILISATION_NUL = "BACKEND_2200";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PLAFOND_UTILISATION_VIDE = "BACKEND_2199";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_PORTEUR_CARTE = "BACKEND_2323";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_RECHERCHE_CODE_SI_IMPOSSIBLE = "BACKEND_2211";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_RESEAU_CARTE_REELLE_INCONNU = "BACKEND_2191";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_RESSOURCE_INDISPONIBLE = "BACKEND_2209";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SCORING_IMPOSSIBLE = "BACKEND_2321";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SERVAU_ACCES_BLOQUE = "BACKEND_2315";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SERVAU_ACCES_CLOS = "BACKEND_2316";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SERVAU_ACCES_NON_OPERATIONNEL = "BACKEND_2313";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SERVAU_COMPTE_INTROUVABLE = "BACKEND_2312";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SERVAU_DERNIERE_TENTATIVE = "BACKEND_2314";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SERVAU_INCONNUE = "BACKEND_2317";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_SERVAU_PARAMETRES = "BACKEND_2311";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_TYPE_CARTE_VIRTUELLE_INCONNU = "BACKEND_2198";  
public static final String CD_ERR_FUNC_CARTEVIRTUELLE_TYPE_CARTE_VIRTUELLE_VIDE = "BACKEND_2197";  
public static final String CD_ERR_FUNC_CHECK_INTEGRITY_TOKEN = "BACKEND_2100";  
public static final String CD_ERR_FUNC_CMD_CHEQUIER_COTATION_BALE_INSUFFISANTE = "BACKEND_2051";  
public static final String CD_ERR_FUNC_CMD_CHEQUIER_JUSTIFICATIFS_INCORRECTS = "BACKEND_2050";  
public static final String CD_ERR_FUNC_COMPTE_NON_TROUVE = "BACKEND_2184";  
public static final String CD_ERR_FUNC_COTITULAIRE_INCONNU = "BACKEND_2091";  
public static final String CD_ERR_FUNC_CTRL_MNT_VI = "BACKEND_2009";  
public static final String CD_ERR_FUNC_DELAI_PREMIER_VERSEMENT_PROGRAMME = "BACKEND_2138";  
public static final String CD_ERR_FUNC_DEMO_NOT_ALLOWED = "BACKEND_2186";  
public static final String CD_ERR_FUNC_DEMO_NOT_IMPLEMENTED = "BACKEND_2185";  
public static final String CD_ERR_FUNC_DISPENSE_PRELEMENT_ELIGIBILITE_COMPTE = "BACKEND_2303";  
public static final String CD_ERR_FUNC_DISPENSE_PRELEMENT_ELIGIBILITE_FRANCE = "BACKEND_2302";  
public static final String CD_ERR_FUNC_DISPENSE_PRELEMENT_ELIGIBILITE_INDIVISION = "BACKEND_2301";  
public static final String CD_ERR_FUNC_DISPENSE_PRELEMENT_ELIGIBILITE_MAJEUR = "BACKEND_2300";  
public static final String CD_ERR_FUNC_DOUBLON_VIREMENT = "BACKEND_2335";  
public static final String CD_ERR_FUNC_ELIGIBILITE1 = "BACKEND_2001";  
public static final String CD_ERR_FUNC_ELIGIBILITE2 = "BACKEND_2002";  
public static final String CD_ERR_FUNC_FAVORIS_LIBELLE_INCORRECT = "BACKEND_2126";  
public static final String CD_ERR_FUNC_FORCE_UPDATE = "BACKEND_2327";  
public static final String CD_ERR_FUNC_INADEQUATION_DATE_NAISSANCE_CODE_ACCES = "BACKEND_2122";  
public static final String CD_ERR_FUNC_INADEQUATION_PAYS_NAISSANCE_CODE_ACCES = "BACKEND_2307";  
public static final String CD_ERR_FUNC_INADEQUATION_VILLE_NAISSANCE_CODE_ACCES = "BACKEND_2306";  
public static final String CD_ERR_FUNC_INCOHERENCE_RECHERCHE_EVENEMENT = "BACKEND_2324";  
public static final String CD_ERR_FUNC_INTERLOCUTEURS_INCOHERENCE_CD_ACCES_ET_NO_PERS = "BACKEND_2115";  
public static final String CD_ERR_FUNC_LIBELLE_BLANK = "BACKEND_2333";  
public static final String CD_ERR_FUNC_LIST_PERS_EXISTE = "BACKEND_2116";  
public static final String CD_ERR_FUNC_MAJ_TARIF_COMPTE_COURTAGE_INTERDIT = "BACKEND_2063";  
public static final String CD_ERR_FUNC_MAJ_TARIF_COMPTE_ERREUR = "BACKEND_2066";  
public static final String CD_ERR_FUNC_MAJ_TARIF_COMPTE_TRADER_300 = "BACKEND_2062";  
public static final String CD_ERR_FUNC_MAJ_TARIF_MODIFICATION_CRD = "BACKEND_2065";  
public static final String CD_ERR_FUNC_MONO_DETENTEUR_AVIE = "BACKEND_2010";  
public static final String CD_ERR_FUNC_MOT_DE_PASSE_ANCIEN_VIDE = "BACKEND_2160";  
public static final String CD_ERR_FUNC_MOT_DE_PASSE_CHIFFRE_INVALIDE = "BACKEND_2155";  
public static final String CD_ERR_FUNC_MOT_DE_PASSE_FORMAT_INVALIDE = "BACKEND_2164";  
public static final String CD_ERR_FUNC_MOT_DE_PASSE_LONGUEUR_INVALIDE = "BACKEND_2163";  
public static final String CD_ERR_FUNC_MOT_DE_PASSE_NOUVEAU_EGAL_ANCIEN = "BACKEND_2162";  
public static final String CD_ERR_FUNC_MOT_DE_PASSE_NOUVEAU_VIDE = "BACKEND_2161";  
public static final String CD_ERR_FUNC_NB_MAX_FAVORIS = "BACKEND_2128";  
public static final String CD_ERR_FUNC_NI_ADRESSE_NI_TELEPHONE = "BACKEND_2124";  
public static final String CD_ERR_FUNC_NON_RESIDENT_FISCAL = "BACKEND_2168";  
public static final String CD_ERR_FUNC_NO_GSM_NON_ASSOCIE_ACCES = "BACKEND_2121";  
public static final String CD_ERR_FUNC_OUVERTURE_COMPTE_A_ZERO_EN_COURS = "BACKEND_2330";  
public static final String CD_ERR_FUNC_PARAMETRE_VIDE = "BACKEND_2165";  
public static final String CD_ERR_FUNC_PERSONNE_INEXISTANTE_HOST = "BACKEND_2112";  
public static final String CD_ERR_FUNC_PFFICTIF_ACCES_NON_AUTORISE = "BACKEND_2218";  
public static final String CD_ERR_FUNC_PFFICTIF_NOMBRE_MAX = "BACKEND_2187";  
public static final String CD_ERR_FUNC_PFFICTIF_NOMBRE_VALEURS_MAX = "BACKEND_2188";  
public static final String CD_ERR_FUNC_PFFICTIF_REQUETE_BASE_KO = "BACKEND_2217";  
public static final String CD_ERR_FUNC_PFFICTIF_SOLDE_NEGATIF = "BACKEND_2220";  
public static final String CD_ERR_FUNC_PFFICTIF_SUPPRESSION_NONAUTORISEE = "BACKEND_2189";  
public static final String CD_ERR_FUNC_PFFICTIF_TYPE_NON_SOUSCRIT = "BACKEND_2223";  
public static final String CD_ERR_FUNC_PFFICTIF_TYPE_NO_COMPTE_BOURSE = "BACKEND_2224";  
public static final String CD_ERR_FUNC_PFFICTIF_VENTE_SUPERIEURE_DETENUE = "BACKEND_2219";  
public static final String CD_ERR_FUNC_PF_HEURE_LIMITE_DEPASSEE = "BACKEND_2221";  
public static final String CD_ERR_FUNC_PLAFOND_DATE_PRELEVEMENT_PREMIER_VERSEMENT_PROGRAMME = "BACKEND_2146";  
public static final String CD_ERR_FUNC_PLAFOND_DATE_VERSEMENT_INITIAL = "BACKEND_2144";  
public static final String CD_ERR_FUNC_PLAFOND_DATE_VIREMENT_PREMIER_VERSEMENT_PROGRAMME = "BACKEND_2147";  
public static final String CD_ERR_FUNC_PLAFOND_VI_DEPASSE = "BACKEND_2140";  
public static final String CD_ERR_FUNC_PLAFOND_VP_DEPASSE = "BACKEND_2142";  
public static final String CD_ERR_FUNC_PLANCHER_DATE_PRELEVEMENT_VERSEMENT_INITIAL = "BACKEND_2143";  
public static final String CD_ERR_FUNC_PLANCHER_DATE_PRELEVEMENT_VERSEMENT_PROGRAMME = "BACKEND_2145";  
public static final String CD_ERR_FUNC_PLANCHER_DATE_VIREMENT_PREMIER_VERSEMENT_PROGRAMME = "BACKEND_2148";  
public static final String CD_ERR_FUNC_PLANCHER_VI_NON_ATTEINT = "BACKEND_2139";  
public static final String CD_ERR_FUNC_PLANCHER_VP_NON_ATTEINT = "BACKEND_2141";  
public static final String CD_ERR_FUNC_RECIF = "BACKEND_2040";  
public static final String CD_ERR_FUNC_RECUP_REVENUS = "BACKEND_2005";  
public static final String CD_ERR_FUNC_RIB_ANR = "BACKEND_2328";  
public static final String CD_ERR_FUNC_SERVICE_EXISTE = "BACKEND_2129";  
public static final String CD_ERR_FUNC_SERVICE_INCOMPATIBLE_COMPTE = "BACKEND_2130";  
public static final String CD_ERR_FUNC_SIMULATION_INEXISTANTE = "BACKEND_2167";  
public static final String CD_ERR_FUNC_SOLDE_COMPTE_A_DEBITER_INSUFFISANT = "BACKEND_2136";  
public static final String CD_ERR_FUNC_SOUSCIPTION_INTRODUCTION = "BACKEND_2110";  
public static final String CD_ERR_FUNC_SOUSCRIPTION_LIVRETA_AUCUNCOMPTE_VIREMENT = "BACKEND_2185";  
public static final String CD_ERR_FUNC_SOUSCRIPTION_LIVRETA_AUCUNCOMPTE_VIREMENT_MINEUR = "BACKEND_2186";  
public static final String CD_ERR_FUNC_SOUS_INTRO_AUCUNE_VALEUR = "BACKEND_2104";  
public static final String CD_ERR_FUNC_SOUS_INTRO_PAS_NON_RESPECTE = "BACKEND_2109";  
public static final String CD_ERR_FUNC_SOUS_INTRO_PEA_INTERDITE = "BACKEND_2106";  
public static final String CD_ERR_FUNC_SOUS_INTRO_RESIDENCE = "BACKEND_2107";  
public static final String CD_ERR_FUNC_SOUS_INTRO_VALEUR_MINIMALE = "BACKEND_2108";  
public static final String CD_ERR_FUNC_SOUS_INTRO_VALEUR_NEGATIVE = "BACKEND_2105";  
public static final String CD_ERR_FUNC_SPCONTROL = "BACKEND_2039";  
public static final String CD_ERR_FUNC_UPDATE_EMAIL = "BACKEND_2007";  
public static final String CD_ERR_FUNC_UPDATE_INFOS = "BACKEND_2008";  
public static final String CD_ERR_FUNC_UPDATE_REVENUS = "BACKEND_2006";  
public static final String CD_ERR_FUNC_VALEUR_VIDE = "BACKEND_2004";  
public static final String CD_ERR_FUNC_VILLE_REQUISE_REEDITION_MDP = "BACKEND_2334";  
public static final String CD_ERR_HISTORIQUE_OST_KO = "BACKEND_2172";  
public static final String CD_ERR_INSERTION_AFFAIRE_ACTION_AUTO = "BACKEND_2031";  
public static final String CD_ERR_INSERTION_PROSPECT = "BACKEND_2034";  
public static final String CD_ERR_LISTE_INSTRUCTIONS_OST_KO = "BACKEND_2170";  
public static final String CD_ERR_LISTE_OST_EN_COURS_KO = "BACKEND_2169";  
public static final String CD_ERR_MISE_A_JOUR_ACTION = "BACKEND_2036";  
public static final String CD_ERR_MISE_A_JOUR_AFFAIRE = "BACKEND_2037";  
public static final String CD_ERR_MISE_A_JOUR_CLIENT = "BACKEND_2032";  
public static final String CD_ERR_MISE_A_JOUR_PROSPECT = "BACKEND_2035";  
public static final String CD_ERR_NO_BACKUP_PHONES = "BACKEND_2080";  
public static final String CD_ERR_NO_PHONES_AFTER_FILTER = "BACKEND_2089";  
public static final String CD_ERR_OPCVM_CATEGORIE_INEXISTANTE = "BACKEND_2305";  
public static final String CD_ERR_OST_MENTION_NON_AUTORISE = "BACKEND_10131";  
public static final String CD_ERR_OST_QUANTITE_TROP_IMPORTANTE = "BACKEND_10122";  
public static final String CD_ERR_OST_VALEUR_NON_NEGOCIABLE = "BACKEND_10266";  
public static final String CD_ERR_OTP_EXPIRE = "BACKEND_2082";  
public static final String CD_ERR_OTP_VIDE = "BACKEND_2086";  
public static final String CD_ERR_PASSAGE_ORDRE = "BACKEND_2039";  
public static final String CD_ERR_PASSAGE_ORDRE_PREPARE = "BACKEND_2041";  
public static final String CD_ERR_PHONE_NOT_EXIST = "BACKEND_2088";  
public static final String CD_ERR_RECHERCHE_OST_KO = "BACKEND_2171";  
public static final String CD_ERR_REFERENCE_CONSO_INEXISTANTE = "BACKEND_2030";  
public static final String CD_ERR_RIB_FORTUNEO = "BACKEND_2103";  
public static final String CD_ERR_SECURITE_FORTE_INDISPONIBLE = "BACKEND_2085";  
public static final String CD_ERR_SECU_FORTE_DERNIERE_TENTATIVE = "BACKEND_2083";  
public static final String CD_ERR_SECU_FORTE_INDISPONIBLE = "BACKEND_2081";  
public static final String CD_ERR_SUPP_AFFAIRE = "BACKEND_2033";  
public static final String CD_ERR_SUPP_DOSSIER = "BACKEND_2038";  
public static final String CD_ERR_SYNTHESE_SAVHEOL = "BACKEND_2060";  
public static final String CD_ERR_TECH_INCONNUE = "BACKEND_1001";  
public static final String CD_ERR_TECH_TIMEOUT = "BACKEND_1002";  
public static final String CD_ERR_TECH_VIDE = "BACKEND_2111";  
public static final String CD_ERR_VALIDATION_CONTRAT_AUTO_CONSO = "BACKEND_2200";  
public static final String CD_INTERDIT_BANCAIRE = "BACKEND_2003";  
public static final String ERREUR_MISE_A_JOUR_PROFIL_SITE = "BACKEND_2150";  
public static final String ERROR_LIST_EXISTS = "BACKEND_2024";  
public static final String ERROR_VALEUR_ALREADY_IN_LIST = "BACKEND_2025";  
public static final String LIST_PERSO_ERROR = "BACKEND_2021";  
public static final String LIST_PERSO_EXISTS = "BACKEND_2022";  
public static final String VALEUR_ALREADY_IN_LIST = "BACKEND_2023";

Thrift

fortuneo.thrift:

struct DeviceInfos {
    1: string libelleAppli,
    2: string versionAppli,
    3: string osName,
    4: string osVersion,
    5: string media,
}

struct DeviceProperties {
    1: optional string macAddress,
    2: string serialNumber,
    3: optional string imei,
    4: optional string phoneNumber,
    5: string model,
    6: string vendor,
    7: optional string uuid,
}

enum Media {
    NONE = 0,
    SVI = 1,
    WEB = 2,
    SMARTPHONE= 3,
    WAP = 4,
    IMODE = 5,
    MINITEL = 6,
    CVD = 7,
    FTO_BV = 8,
    IPHONE = 9,
    IPAD = 10,
    APPLET_ARIANE = 11,
    ANDROID = 12,
    ANDROID_TABLETTE = 13
}

struct OTP {
    1: string otp,
    2: string codeAcces,
    3: Media media,
}

struct SecureToken {
    1: string token,
    2: string uuid,
    3: string hashNumeroPersonne,
    4: string refreshToken,
}

struct SecureTokenRequest {
    1: SecureToken secureToken,
    2: OTP otp,
    3: string infosMobiles,
    4: DeviceInfos device
}

struct AccesRequest {
    1: string codeAcces,
    2: string password,
    3: optional string numeroPersonne,
    4: optional string email,
    5: bool getOptionalDatas,
    6: string media,
    7: string uuid,
    8: Device device,
    9: optional string fingerPrint,
}

struct Device {
    1: optional i64 id,
    2: string name,
    3: DeviceProperties deviceProperties,
    4: optional string media,
    5: optional string biometryActivationState,
}

struct SituationProfessionnellePersonnePhysique {
    1: string codeProfession,
    2: string codeStatutProfessionnel,
    3: double montantRevenusNetsMensuels,
    4: string secteurActivite,
    5: string patrimoineNet,
    6: string libelleProfession,
}

enum Civilite {
    INCONNU = 0,
    MONSIEUR = 1,
    MADAME = 2,
    MADEMOISELLE = 3,
    AUTRE = 4
}

struct Adresse {
    1: string adresse,
    2: string complementAdresse,
    3: string lieuDitBP,
    4: string ville,
    5: string codePostal,
    6: string pays,
    7: string codePays,
    8: string codeEtatAdresse,
    9: string codeINSEE,
    10: string numeroCommuneINSEE,
    11: string codePaysCRM,
    12: bool estAdresseNormalisee,
}

struct Personne {
    1: string nom,
    2: string preNom,
    3: Civilite civilite,
    4: i32 dateDeNaissance,
    5: string capaciteJuridique,
    6: string numeroPersonne,
    7: string villeDeNaissance,
    8: string paysNaissance,
    9: string paysNationalite,
    10: string email,
    11: string numTelPrincipal,
    12: string numTelPortable,
    13: Adresse adressePostale,
    14: Adresse adresseFiscale,
    15: string nomJeuneFille,
    16: string departementDeNaissance,
    17: string codeAcces,
    18: SituationProfessionnellePersonnePhysique situationProfessionnellePersonnePhysique,
    19: string codeParrain,
    20: string identifiantCRM,
}

struct Acces {
    1: string numeroPersonne,
    2: string codeAcces,
    3: Personne personne,
    4: i32 dateDerniereConnexion,
    5: Media mediaDerniereConnexion,
}

struct PasswordProperties {
    1: bool outdated,
    2: i16 nbChangePasswordDifferAvailable
}

enum EtatMigrationAcces {
    NA = 0,
    PREMIERE_CONNEXION_ANCIEN_ACCES = 1,
    PHASE_TRANSITOIRE = 2,
    PHASE_BLOCAGE = 3,
    TERMINEE = 4,
    PREMIERE_CONNEXION_NOUVEL_ACCES = 5
}

struct AccesSecureResponse {
    1: Acces acces,
    2: SecureToken secureToken,
    3: PasswordProperties passwordProperties,
    4: EtatMigrationAcces etatMigratioAcces,
}

struct MiseAJourMotDePasseRequest {
    1: string codeAcces,
    2: string ancienMotDePasse,
    3: string nouveauMotDePasse
}

exception TechnicalException {
    1: string code,
    2: string message,
    3: string parametres,
    4: string hostName,
    5: string stringStackTrace
}

exception FunctionnalException {
    1: string code,
    2: string message
}

struct ValiderPremiereConnexionNouvelAccesRequest {
    1: string codeAcces,
    2: string numeroPersonne
}

struct ValiderPremiereConnexionAncienAccesRequest {
    1: string codeAcces,
    2: string numeroPersonne
}

service PartenaireAcces {
    AccesSecureResponse checkAccesSmartphone(1:AccesRequest accesRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    AccesSecureResponse checkAccesSVI(1:AccesRequest accesRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    AccesSecureResponse activateOAuth(1:AccesRequest accesRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    AccesSecureResponse checkAccessOAuth(1:SecureTokenRequest secureTokenRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    void desactivateOAuth(1:SecureTokenRequest secureTokenRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    void disconnectSmartphone(1:SecureTokenRequest secureTokenRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    void miseAJourMotDePasse(1:MiseAJourMotDePasseRequest miseAJourMotDePasseRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    void validerPremiereConnexionAncienAcces(1:ValiderPremiereConnexionAncienAccesRequest validerPremiereConnexionAncienAccesRequest, 2:SecureTokenRequest secureTokenRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    void validerPremiereConnexionNouvelAcces(1:ValiderPremiereConnexionNouvelAccesRequest validerPremiereConnexionNouvelAccesRequest, 2:SecureTokenRequest secureTokenRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    void validerSecuriteForteConnexion(1:SecureTokenRequest secureTokenRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
}

struct Categorie {
    1: string identifiant,
    2: string nomCategorie
}

struct Groupe {
    1: string identifiant,
    2: string nomGroupe,
    3: list<Categorie> listeCategories
}

struct GroupQuestionResponse {
    1: list<Groupe> listeGroupe
}

struct ListeQuestionRequest {
    1: list<Categorie> listeCategories,
    2: string identifiantGroupe
}

struct Reponse {
    1: string contenu,
    2: string permalien
}

struct Question {
    1: string identifiant,
    2: string titre,
    3: string contenu,
    4: string permalien,
    5: list<Reponse> reponses,
    6: i32 dateDerniereMiseAJour,
    7: bool star,
    8: i16 indiceUtilite
}

struct ListeQuestionsResponse {
    1: list<Question> questions
}

struct ListeQuestionCategorieRequest {
    1: string identifiantCategorie,
    2: i16 offset,
    3: i16 nombreResultat
}

struct ReponsesSaisiesRequest {
    1: Question question
}

struct ReponsesSaisiesResponse {
    1: list<Reponse> reponses
}

service FAQ {
    GroupQuestionResponse getGroupeQestions() throws (1:TechnicalException te, 2:FunctionnalException fe)
    ListeQuestionsResponse getQestionsALaUne(1:ListeQuestionRequest listeQuestionRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    ListeQuestionsResponse getQestionsParCategorie(1:ListeQuestionCategorieRequest listeQuestionCategorieRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
    ReponsesSaisiesResponse getReponsesSaisies(1:ReponsesSaisiesRequest reponsesSaisiesRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
}

enum YesNo {
    YES = 0,
    NO = 1,
    UNKNOWN = 2
}

enum AccesFees {
    UNKNOWN = 0,
    DOMESTIC = 1,
    INTERNATIONAL = 2,
    DOMESTIC_AND_INTERNATIONAL = 3,
    NO_FEE = 4
}

enum Availability {
    UNKNOWN = 0,
    ALWAYS_AVAILABLE = 1,
    BUSINESS_HOURS = 2,
    IRREGULAR_HOURS = 3
}

enum DistanceUnit {
    MILE = 0,
    KILOMETER = 1
}

enum LocationTypeEnum {
    OTHER = 0,
    AIRPORT = 1,
    HOSPITAL = 2,
    FINANCIAL_INSTITUTION = 3
}

struct LocationType {
    1: LocationTypeEnum type,
    2: string airportCode
}

struct AtmGeoLocation {
    1: double latitude,
    2: double longitude
}

struct Country {
    1: string name,
    2: string code
}

struct Address {
    1: string addressLine1,
    2: string addressLine2,
    3: string city,
    4: string postalCode,
    5: Country countrySubdivision,
    6: Country country
}

struct Location {
    1: string name,
    2: double distance,
    3: DistanceUnit distanceUnit,
    4: Address address,
    5: AtmGeoLocation point,
    6: LocationType locationType
}

enum SurchargeFreeAllianceNetwork {
    DOES_NOT_PARTICIPATE_IN_SFA = 0,
    ALLPOINT_PREPAID = 1,
    MONEYPASS_DEBIT = 2,
    ALL_SURCHARGE_FREE = 3
}

struct Atm {
    1: Location location,
    2: YesNo handicapAccessible,
    3: YesNo camera,
    4: Availability availability,
    5: AccesFees accessFees,
    6: string owner,
    7: YesNo sharedDeposit,
    8: YesNo surchargeFreeAlliance,
    9: SurchargeFreeAllianceNetwork surchargeFreeAllianceNetwork,
    10: string sponsor,
    11: YesNo supportEMV,
    12: YesNo internationalMaestroAccepted
}

struct Atms {
    1: i16 pageOffset,
    2: i16 totalCount,
    3: list<Atm> atmList
}

struct FindAtmsResponse {
    1: Atms amtList
}

struct AtmPagination {
    1: i16 pageOffset,
    2: i16 pageLength
}

struct QueryParameters {
    1: optional AtmPagination pagination,
    2: optional Address address,
    3: optional AtmGeoLocation point,
    4: optional DistanceUnit distanceUnit,
    5: optional i16 radius,
    6: optional YesNo supportEMV,
    7: optional YesNo internationalMaestroAccepted
}

struct FindAtmsRequest {
    1: QueryParameters queryParameters
}

service GeoGabs {
    FindAtmsResponse findAtms(1:FindAtmsRequest findAtmsRequest) throws (1:TechnicalException te, 2:FunctionnalException fe)
}

fortuneo.py:

import thriftpy2
from thriftpy2.http import make_client, THttpHeaderFactory

fortuneo = thriftpy2.load("fortuneo.thrift")

client = make_client(fortuneo.PartenaireAcces, url='https://api.fortuneo.fr/passerelle/1/partenaire/acces/', port = 443, timeout = 20000, http_header_factory = THttpHeaderFactory({
    'apikey': 'Jg8HUU2jexfdbpbTFJXFHPEEY0kZf9va',
    'User-Agent': 'fortuneo-9.5.2.3184_prod'
}))

request = fortuneo.AccesRequest(
    codeAcces = "12345678",
    password = "password",
    getOptionalDatas = False,
    media = "ANDROID",
    uuid = "9664d56d682e549c",
    device = fortuneo.Device(
        name = "Pixel 3",
        deviceProperties = fortuneo.DeviceProperties(
            serialNumber = "9664d56d682e549c",
            model = "Pixel 3",
            vendor = "GOOGLE"
        )
    )
)

request = client.checkAccesSmartphone(request)

Requirements:

$ pip install thriftpy2

APKs

9.5.2