GFS API Documentation

Convertissez n'importe quel fichier comptable vers FEC, SAF-T, JSON ou CSV. 27+ pays EU, conformité ViDA intégrée.

🔑 Plan API requis REST / JSON v5 — Mars 2026
Prérequis Plan GFS API actif (1 990 € HT/mois) · Clé API générée depuis votre espace client · Support dédié : api-gfs@fintusk.fr

Authentification

L'API utilise deux modes d'authentification selon l'endpoint :

Mode 1 — JWT Supabase (endpoints `/gfs-engine`)

Envoyez votre JWT Supabase dans le header Authorization. Le token est obtenu après connexion via supabase.auth.signInWithPassword().

Authorization: Bearer <votre_jwt_supabase>
Content-Type: application/json

Mode 2 — Clé API (intégrations machine-to-machine)

Pour les intégrations sans session utilisateur, utilisez votre clé API GFS dans le header X-GFS-API-Key. Générez vos clés depuis le dashboard GFS → Paramètres → Clés API.

X-GFS-API-Key: gfs_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
Sécurité Ne transmettez jamais vos clés API dans le corps des requêtes ou les URLs. Stockez-les dans des variables d'environnement côté serveur uniquement.

Base URL

PROD https://hxktqzpkupvlfyzifjfd.supabase.co/functions/v1

Tous les endpoints sont servis depuis l'infrastructure Supabase EU North (Stockholm, Suède). Les données ne quittent jamais l'Union Européenne.


POST /gfs-engine

Endpoint principal de conversion. Prend un fichier comptable source, détecte le format, mappe les comptes via IA, et retourne le fichier converti au format cible.

POST /gfs-engine API · Cabinet Pro · Solo

Corps de la requête

ParamètreTypeDescription
fileContentrequis string Contenu brut du fichier comptable (UTF-8). Formats acceptés : CSV, TXT, FEC (pipe-séparé). Taille max : 50 Mo.
countryrequis string Code pays source. Voir liste des codes pays. Ex : fr, es, de
formatrequis string Format de sortie souhaité : fec · saft · json · csv
companyoptionnel string Nom de la société. Utilisé dans les métadonnées du fichier de sortie. Défaut : Entreprise
yearoptionnel string Exercice comptable (YYYY). Défaut : 2024
currencyoptionnel string Code devise ISO 4217. Défaut : EUR
languageoptionnel string Langue de l'analyse IA retournée. Codes : fr · es · en · de · it · pt. Défaut : fr
user_idoptionnel string UUID Supabase de l'utilisateur. Requis pour le compteur de quota (plan Solo). Ignoré pour le plan API.

Exemple de requête

curl -X POST \
  https://hxktqzpkupvlfyzifjfd.supabase.co/functions/v1/gfs-engine \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "fileContent": "numero_cuenta;debe;haber;fecha;concepto\n430;1500.00;;20240101;Vente client A",
    "country": "es",
    "format": "fec",
    "company": "ACME España SL",
    "year": "2024",
    "currency": "EUR",
    "language": "fr"
  }'

Structure de la réponse (200 OK)

La réponse est encapsulée dans un tableau content compatible format Anthropic Messages API. L'objet de données est dans content[0].text sous forme de JSON stringifié.

{
  "content": [{
    "type": "text",
    "text": "{
      \"analysis\": {
        \"detected_format\": \"PGC Spain\",
        \"detected_country\": \"es\",
        \"separator\": \";\",
        \"encoding\": \"UTF-8\",
        \"quality_score\": 92,
        \"ai_comment\": \"Fichier PGC espagnol détecté. 1 200 lignes converties...\",
        \"language\": \"fr\"
      },
      \"mapping\": [
        {\"source_account\": \"430\", \"target_account\": \"411\",
         \"target_label\": \"Clients\", \"confidence\": \"high\"}
      ],
      \"validation\": [
        {\"type\": \"ok\", \"message\": \"Balance équilibrée : 45 230.00 €\"},
        {\"type\": \"warn\", \"message\": \"12 lignes sans numéro de TVA — impact SII espagnol\"}
      ],
      \"vida_compliance\": {
        \"status\": \"warn\",
        \"format\": \"SII\",
        \"vat_rate\": \"21%\",
        \"missing_fields\": [\"numero_iva\"],
        \"notes\": \"Champ NIF manquant sur 12 lignes. Requis pour déclaration SII.\"
      },
      \"stats\": {
        \"lines_converted\": 1200,
        \"total_input_lines\": 1200,
        \"accounts_mapped\": 45,
        \"balance_check\": \"équilibré\",
        \"coverage_pct\": 94,
        \"total_debit\": 45230.00,
        \"total_credit\": 45230.00,
        \"truncated\": false
      },
      \"output_preview\": \"JournalCode|JournalLib|EcritureNum|...\",
      \"output_full\": \"<base64 du fichier FEC complet>\",
      \"output_filename\": \"GFS_ACME_España_SL_2024.fec\",
      \"output_mime\": \"text/plain\"
    }"
  }]
}

Champs de réponse — stats

ChampTypeDescription
lines_convertedintegerNombre total de lignes parsées et converties
total_input_linesintegerNombre de lignes dans le fichier source (hors header)
accounts_mappedintegerNombre de comptes ayant reçu un mapping IA
coverage_pctintegerPourcentage de lignes avec mapping appliqué (0-100)
balance_checkstringéquilibré ou déséquilibré
total_debitfloatTotal débit en devise source
total_creditfloatTotal crédit en devise source
truncatedbooleantrue si le fichier de sortie est limité à 10 000 lignes inline
lines_in_downloadintegerLignes réellement présentes dans output_full

Décodage du fichier converti

Le champ output_full contient le fichier converti encodé en Base64 (UTF-8). Pour le décoder :

// JavaScript / Node.js
const fileContent = decodeURIComponent(escape(atob(response.output_full)));

// Python
import base64
file_content = base64.b64decode(response['output_full']).decode('utf-8')

// curl + bash
echo "<base64_string>" | base64 -d > output.fec

POST /stripe-checkout

Crée une session Checkout Stripe avec le user_id en metadata. Garantit que le webhook Stripe met à jour le bon profil après paiement.

POST /stripe-checkout JWT requis
ParamètreTypeDescription
planrequisstringcabinet · cabinet_pro · api
productrequisstringgfs · fintusk
success_urloptionnelstringURL de redirection après paiement. Défaut : confirmation page GFS.
cancel_urloptionnelstringURL de redirection en cas d'abandon.

Réponse

{ "url": "https://checkout.stripe.com/...", "session_id": "cs_live_..." }

Formats supportés

Formats d'entrée

FormatSéparateurs détectésEncodagesTaille max
FEC (DGFiP France)| (pipe)UTF-8, ISO-8859-150 Mo
CSV générique; , | tabUTF-8, ISO-8859-1, Windows-125250 Mo
TXT export ERPDétection autoUTF-850 Mo
Excel (via CSV)Auto après exportUTF-850 Mo

Formats de sortie

CodeFormatStandardExtension
fecFichier des Écritures ComptablesDGFiP France.fec
saftStandard Audit File for TaxOCDE / UE (XML).xml
jsonJSON structuré GFSPropriétaire Fintusk.json
csvCSV normalisé UTF-8Générique.csv

Codes pays

CodePaysPlan comptableViDA
frFrancePCGe-facture Sep. 2026
esEspagnePGCSII actif
deAllemagneSKR03 / SKR04eRechnung Jan. 2025
itItaliePdCFatturaPA actif
ptPortugalSNC/NCRFSAF-T-PT actif
beBelgiquePCMNPeppol 2026
nlPays-BasRGSPeppol actif
plPologneKSRKSeF Fév. 2026
chSuisseKMU
seSuèdeBAS
roRoumanieOMFPRO e-Factura actif
ohadaZone OHADA (17 pays)SYSCOHADA

Liste complète des 27+ pays disponibles sur demande à api-gfs@fintusk.fr.


Codes d'erreur

Code HTTPCode erreurDescriptionAction
200 Conversion réussie
400 no_file_content Le champ fileContent est vide Vérifiez que le contenu du fichier est bien transmis
401 unauthorized Token JWT absent ou invalide Vérifiez votre Authorization header
429 quota_exceeded Quota mensuel atteint (plan Solo : 50/mois) Passez au plan Cabinet Pro pour des conversions illimitées
500 internal_error Erreur serveur interne Contactez api-gfs@fintusk.fr avec les détails de la requête

Structure d'une réponse d'erreur

{
  "error": "quota_exceeded",
  "message": "Limite de 50 conversions/mois atteinte pour le plan Solo.",
  "quota": { "used": 50, "limit": 50, "plan": "cabinet" }
}

Quotas et limites

PlanConversions/moisTaille max fichierLignes inline max
Cabinet Solo (149 €)5050 Mo10 000
Cabinet Pro (499 €)Illimité50 Mo10 000
API (1 990 €)Illimité50 Mo10 000
Fichiers > 10 000 lignes Le champ output_full est limité à 10 000 lignes encodées. Pour les fichiers plus volumineux, le champ stats.truncated sera true. Contactez api-gfs@fintusk.fr pour un accès aux exports complets via lien de téléchargement sécurisé.

SLA & disponibilité

MétriqueEngagement (Plan API)
Disponibilité mensuelle≥ 99,5 %
Temps de réponse p95< 8 secondes
Temps de réponse p50< 4 secondes
Délai de réponse support P1< 1 heure
Délai de réponse support P2< 4 heures
Délai de réponse support P3< 24 heures ouvrées

Le SLA complet (compensations, procédures, exclusions) est disponible en téléchargement sur demande à api-gfs@fintusk.fr.


Changelog

v5 — Mars 2026

Agent Compliance ViDA avec validation proactive chiffrée. Compteur de quota par plan. Log des conversions en BDD. Paramètre user_id ajouté. Gestion HTTP 429 quota dépassé.

v4 — Février 2026

Parser multi-langue 100+ aliases (ES, DE, IT, NL, PL...). Format montants européens 1.234,56. Paramètre language pour l'analyse IA. Limite inline 10k lignes avec safeBase64.

v3 — Janvier 2026

Parser côté serveur pour les fichiers 50 000 lignes. Mapping par préfixe de compte. Support SAF-T XML complet.


GFS — Global Financial Standard · by Fintusk

api-gfs@fintusk.fr · fintusk-gfs.fr · CGV · Confidentialité