API Bank Statement Conversion
Ajoutez la conversion de relevés bancaires à votre logiciel avec un flux upload, statut et téléchargement.
Aperçu
L’API Bank Statement Conversion s’adresse aux développeurs qui veulent ajouter la conversion à leur propre application. Elle documente le flux public: vérifier éventuellement la capacité du compte, envoyer les fichiers, interroger le statut, puis télécharger les résultats avec le jeton retourné.
Cette référence est volontairement limitée au flux public de conversion.
https://bank-statement-conversion.com/apiDémarrage rapide
Créer un jeton API
Générez un jeton dans le tableau de bord et envoyez-le avec Authorization: Bearer YOUR_API_TOKEN.
Envoyer un fichier
POST vers /api/upload avec statement[], format et les options facultatives.
Interroger le statut
Utilisez le jobId retourné avec /api/conversion-status/{jobId} jusqu’à obtenir download_token.
Télécharger le résultat
GET /api/download/{downloadToken} et enregistrez la réponse binaire comme fichier converti.
Authentification
Authentification par jeton API
Toutes les requêtes API doivent inclure un jeton API. Les jetons se créent dans la section API Tokens du tableau de bord.
Créer un jeton API
- Connectez-vous à votre compte
- Ouvrez la section API Tokens du tableau de bord
- Cliquez sur "Create New Token" et nommez le jeton
- Copiez et conservez le jeton. Il ne sera affiché qu’une seule fois.
Utiliser le jeton API
Incluez le jeton API dans l’en-tête Authorization:
Authorization: Bearer YOUR_API_TOKENAgents IA
Utiliser l’API avec des agents IA
Les outils d’IA peuvent s’intégrer au même flux de conversion public que les développeurs. Utilisez le schéma OpenAPI, les fichiers de découverte LLM ou le point de terminaison MCP afin que les agents sachent quels points de terminaison de conversion appeler et quelles actions nécessitent une confirmation.
Découverte pour agents
/api/openapi.json/llms.txt/llms-full.txt/mcp/bank-statement-conversion- Utilisez
/api/openapi.jsonpour les outils compatibles avec un schéma, comme ChatGPT Actions ou les générateurs d’agents personnalisés. - Utilisez
/llms.txtet/llms-full.txtpour fournir aux agents le contexte produit et API canonique. - Utilisez
/mcp/bank-statement-conversionpour les clients agents compatibles MCP qui prennent en charge les serveurs MCP distants.
Configuration unique du jeton
- Connectez-vous une fois et créez un jeton API dans le tableau de bord.
- Conservez toutes les autorisations de conversion activées, sauf si vous souhaitez un jeton restreint.
- Définissez le jeton comme BSC_API_TOKEN dans l’environnement du client MCP.
- Révoquez le jeton depuis le tableau de bord lorsque l’accès de l’agent doit prendre fin.
Connecter Codex, Claude, Cursor et d’autres clients IA
Tous les clients IA compatibles MCP utilisent le même endpoint distant et un jeton bearer. Gardez le jeton dans une variable d’environnement, pas dans les prompts ni dans le code source.
https://bank-statement-conversion.com/mcp/bank-statement-conversionAuthorization: Bearer YOUR_API_TOKENConfiguration Codex
Ajoutez cette entrée de serveur à votre configuration Codex.
[mcp_servers.bank_statement_conversion]
url = "https://bank-statement-conversion.com/mcp/bank-statement-conversion"
bearer_token_env_var = "BSC_API_TOKEN"Définissez le jeton dans votre shell ou environnement système, puis redémarrez le client IA.
export BSC_API_TOKEN="YOUR_API_TOKEN_HERE"Autres clients IA
- Claude, Cursor et les autres clients MCP doivent utiliser le même endpoint et le même jeton bearer Authorization.
- ChatGPT Actions et les générateurs d’agents personnalisés doivent utiliser /api/openapi.json au lieu de MCP lorsqu’ils ont besoin d’un schéma OpenAPI.
- Utilisez /llms.txt et /llms-full.txt comme contexte produit pour les agents qui prennent en charge les fichiers de connaissances.
Autorisations de jeton limitées
Endpoints du flux
Voici les seuls endpoints nécessaires pour ajouter la conversion de documents à votre application.
| Endpoint | Méthode | Description |
|---|---|---|
/api/user-status | GET | Vérification facultative des crédits, pages et abonnement |
/api/upload | POST | Envoyer des relevés bancaires à convertir |
/api/conversion-status/{jobId} | GET | Vérifier le statut d’une conversion |
/api/download/{downloadToken} | GET | Télécharger une conversion terminée avec le jeton retourné |
Endpoint de statut du compte
GET /api/user-status
Utilisez cet endpoint facultatif avant l’envoi pour confirmer que le jeton dispose de crédits, pages ou accès payant.
Champs utiles de la réponse
| Champ | Type | Description |
|---|---|---|
remaining_credits | integer | Crédits disponibles pour les conversions basées sur des crédits. |
remaining_daily_pages | integer | Quota quotidien de pages restant pour l’utilisateur authentifié. |
remaining_premium_pages | integer | Quota mensuel premium de pages restant pour le plan effectif. |
plan_type | string | Plan d’abonnement effectif du jeton API. |
Exemple de réponse
{
"success": true,
"remaining_credits": 42,
"remaining_daily_pages": 100,
"remaining_premium_pages": 950,
"plan_type": "premium"
}Endpoint d’envoi
POST /api/upload
Cet endpoint permet d’envoyer des relevés bancaires à convertir. La conversion est asynchrone et vous recevrez un ID de tâche pour vérifier le statut plus tard.
Formats d’entrée pris en charge
| Utilisation | Formats | Extensions | Notes |
|---|---|---|---|
| Conversions standard | PDF, JPG/JPEG, PNG, TIFF/TIF, CSV, XLS/XLSX, OFX, QBO, QFX, 940, STA, MT940, MT940X, XML, CAMT.053 | .pdf, .jpg, .jpeg, .png, .tiff, .tif, .csv, .xls, .xlsx, .ofx, .qbo, .qfx, .940, .sta, .mt940, .mt940x, .xml, .camt053 | À utiliser pour les conversions de relevés bancaires, factures et reçus. |
| Nettoyage CSV | CSV, XLS, XLSX | .csv, .xls, .xlsx | À utiliser uniquement lorsque format vaut csv_clean. |
| Génération de fichiers de paiement | CSV, XLS, XLSX | .csv, .xls, .xlsx | À utiliser pour les lignes de paiement CSV ou Excel qui génèrent des fichiers ACH/NACHA, CPA005, SEPA XML, BACS, ABA ou NZ prêts pour la banque. |
Formats de sortie pris en charge
document_type | Document | Valeurs format autorisées |
|---|---|---|
bank_statement | Relevé bancaire | csvexceljsonqb_onlineqb_desktopxeroofxofx_legacyqfxmt940mt940_moneybirdcamt053camt053_legacycamt053_moneybirdcamt053_netsuitecamt053_sap_v2camt053_sap_v8camt053_business_centralcamt053_datevcamt053_afascamt053_twinfieldtally_xmlbai2bai2_netsuitebai2_sapbai2_bank_xsagesage_cloudsage_intacctmyobdatevdatev_accountingcsv_clean |
invoice | Facture | csvexceljsonqb_onlineqb_desktopubl_xmlubl_peppolxrechnung_ublzugferd_pdffactur_x_pdf |
receipt | Reçu | csvexceljson |
payment_file | Fichier de paiement bancaire | payment_nachapayment_cpa005payment_sepa_pain001payment_bacspayment_abapayment_nz |
Utilisez document_type=payment_file avec payment_nacha, payment_cpa005, payment_sepa_pain001, payment_bacs, payment_aba ou payment_nz. Téléversez un CSV, XLS ou XLSX dans statement[] ; la génération utilise le flux existant de crédits, historique et jetons de téléchargement.
Ouvrir le générateur de fichiers de paiementUse document_type=positive_pay_file with format=positive_pay. Upload CSV, XLS, or XLSX check rows as statement[] and pass positive_pay_settings for Chase, TD, generic CSV, or fixed-width profiles.
Open Positive Pay file generatorParamètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
format | string | Oui | Format de sortie. Utilisez l’une des valeurs format autorisées ci-dessus pour le document_type choisi. |
document_type | string | Non | Catégorie de document : bank_statement, invoice, receipt ou payment_file. Par défaut : bank_statement. |
statement | file array | Oui | Fichiers à convertir. Envoyez un ou plusieurs fichiers comme statement[]. |
conversion_mode | string | Non | Mode de conversion: precision ou fast. La valeur par défaut est precision. |
separate_debit_credit | boolean | Non | Indique s’il faut séparer les colonnes débit et crédit. Par défaut: false. |
combine_files | boolean | Non | Indique s’il faut combiner plusieurs fichiers en une seule sortie. Par défaut: false. |
Exemple de réponse
{
"stage": "pending",
"jobId": "5f3a7d8c-8a91-4a2e-9d3b-4c84f0636c12"
}Endpoint de statut
GET /api/conversion-status/{jobId}
Cet endpoint permet de vérifier le statut d’une tâche de conversion. Interrogez-le jusqu’à ce que la tâche soit terminée.
Paramètres de chemin
| Paramètre | Type | Description |
|---|---|---|
jobId | string | L’ID de tâche retourné par l’endpoint d’envoi |
Exemple de réponse en attente
{
"stage": "processing",
"success": false,
"previews": []
}Exemple de réponse terminée
{
"success": true,
"previews": [
{
"file_name": "bank_statement.pdf",
"format": "CSV",
"download_token": "Y8Jm7qVf9sR2kP6nL4xA0bT3cD5eF1gH",
"partial_conversion": false,
"credits_used": 1
}
],
"failed_files": [],
"remaining_credits": 41,
"remaining_premium_pages": 949,
"remaining_daily_pages": 99
}Exemple de réponse échouée
{
"stage": "complete",
"success": false,
"error": "An error occurred during the conversion process.",
"message": "The uploaded file could not be processed.",
"previews": []
}Endpoint de téléchargement
GET /api/download/{downloadToken}
Utilisez le download_token retourné dans une réponse de statut terminée. Ne construisez pas vous-même les jetons de téléchargement.
Paramètres de chemin
| Paramètre | Type | Description |
|---|---|---|
downloadToken | string | Le download_token retourné pour un fichier converti dans la réponse de statut. |
Exemple de requête
curl -L \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-o converted_statement.csv \
"https://bank-statement-conversion.com/api/download/Y8Jm7qVf9sR2kP6nL4xA0bT3cD5eF1gH"Exemple de réponse
200 OKExemples d’en-têtes de réponse
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Disposition: attachment; filename="bank-statement.csv"
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
}Gestion des erreurs
L’API utilise les codes de statut HTTP standard pour indiquer le succès ou l’échec des requêtes.
| Code de statut | Description |
|---|---|
| 200 OK | La requête a réussi |
| 400 Bad Request | La requête est invalide ou des paramètres requis sont manquants |
| 401 Unauthorized | L’authentification a échoué ou le jeton est invalide |
| 403 Forbidden | L’utilisateur authentifié n’a pas l’autorisation d’accéder à la ressource |
| 422 Unprocessable Entity | Des erreurs de validation se sont produites |
| 500 Internal Server Error | Une erreur s’est produite sur le serveur |
Exemples de réponses d’erreur
{
"message": "Unauthenticated."
}{
"message": "The given data was invalid.",
"errors": {
"statement": [
"The statement field is required."
],
"format": [
"The selected format is invalid."
]
}
}{
"success": false,
"error": "Insufficient credits or page allowance for this conversion."
}Limites de débit
Pour garantir un usage équitable, les limites dépendent de votre abonnement:
- Utilisateurs premium: 100 requêtes par minute
- Taille maximale: 100 Mo par fichier
- Maximum: 5 fichiers par requête
Exemples de code
Exemples complets du flux: envoyer, interroger, télécharger.
npm install axios form-dataPython: pip install requestsPHP: PHP cURL extension enabledcURL: curl and jq installedGo: Go 1.20+Ruby: gem install multipart-postC#: .NET 7+npm install axios form-data1// Upload a bank statement file
2const axios = require('axios');
3const FormData = require('form-data');
4const fs = require('fs');
5
6// Your API token from the dashboard
7const API_TOKEN = 'your_api_token_here';
8
9// Create a form data object
10const formData = new FormData();
11formData.append('document_type', 'bank_statement');
12formData.append('format', 'csv');
13formData.append('statement[]', fs.createReadStream('bank_statement.pdf'));
14formData.append('separate_debit_credit', 'true');
15formData.append('combine_files', 'false');
16
17// Make the API request
18const BASE_URL = 'https://bank-statement-conversion.com/api';
19
20axios.post(`${BASE_URL}/upload`, formData, {
21 headers: {
22 'Authorization': `Bearer ${API_TOKEN}`,
23 ...formData.getHeaders()
24 }
25})
26.then(response => {
27 const jobId = response.data.jobId;
28 console.log(`Conversion job started with ID: ${jobId}`);
29
30 // Poll for job status
31 checkJobStatus(jobId);
32})
33.catch(error => {
34 console.error('Error uploading file:', error.response ? error.response.data : error.message);
35});
36
37// Function to check job status
38function checkJobStatus(jobId) {
39 axios.get(`${BASE_URL}/conversion-status/${jobId}`, {
40 headers: {
41 'Authorization': `Bearer ${API_TOKEN}`
42 }
43 })
44 .then(response => {
45 const data = response.data;
46 console.log('Job stage:', data.stage);
47
48 if (data.success && data.previews && data.previews.length > 0) {
49 const downloadToken = data.previews[0].download_token;
50 downloadFile(`${BASE_URL}/download/${downloadToken}`);
51 } else if (data.stage === 'pending' || data.stage === 'processing') {
52 // Check again after 5 seconds
53 setTimeout(() => checkJobStatus(jobId), 5000);
54 } else {
55 console.error('Conversion failed:', data.error || data.message || data);
56 }
57 })
58 .catch(error => {
59 console.error('Error checking job status:', error.response ? error.response.data : error.message);
60 });
61}
62
63// Function to download the converted file
64function downloadFile(url) {
65 const outputPath = 'converted_statement.csv';
66
67 axios({
68 method: 'get',
69 url: url,
70 responseType: 'stream',
71 headers: {
72 'Authorization': `Bearer ${API_TOKEN}`
73 }
74 })
75 .then(response => {
76 response.data.pipe(fs.createWriteStream(outputPath));
77 console.log(`File downloaded to ${outputPath}`);
78 })
79 .catch(error => {
80 console.error('Error downloading file:', error.message);
81 });
82}