תיעוד API

מדריך מלא לשילוב API המרת דפי חשבון בנק של Balanzio

הקדמה

API של Balanzio מאפשר לכם להמיר PDF של דפי חשבון בנק לפורמטי נתונים מובנים (CSV, XLSX, JSON). ה-API שלנו תומך ב-PDF טקסטואליים ומבוססי תמונה (סרוקים) עם עיבוד OCR.

עיבוד מהיר

PDF טקסטואליים תוך שניות, OCR ב-<30 שניות לעמוד

מאובטח ותואם GDPR

מחיקה אוטומטית אחרי 24 שעות

תמיכה רב-בנקית

תמיכה ב-100+ בנקים

אימות

כל בקשות ה-API דורשות אימות באמצעות אסימון Bearer. כללו את מפתח ה-API שלכם בכותרת Authorization:

HTTP
Authorization: Bearer YOUR_API_KEY
שמרו את מפתח ה-API שלכם בסוד!

לעולם אל תחשפו את מפתח ה-API שלכם בקוד צד-לקוח או תעלו אותו לבקרת גרסאות.

נקודות קצה

URL בסיס

https://api.balanzio.app/api/v1

העלאת דוח בנק

POST
/bank-statement

העלו קובץ PDF אחד או מספר קבצים לעיבוד. ה-API יזהה אוטומטית אם ה-PDF הוא טקסטואלי או מבוסס-תמונה (סרוק).

פרמטרי בקשה

פרמטרסוגנדרשתיאור
filesfile[]כןקובץ/י PDF לעיבוד (מקסימום 3MB כל אחד)

דוגמת בקשה

curl
curl -X POST https://api.balanzio.app/api/v1/bank-statement \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "files=@statement.pdf"

תשובה (201 נוצר)

json
[
  {
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "filename": "statement.pdf",
    "pdfType": "TEXT_BASED",
    "state": "READY",
    "numberOfPages": 3
  }
]

שדות תשובה

שדהסוגתיאור
uuidstringמזהה ייחודי לקובץ המועלה
filenamestringשם קובץ מקורי
pdfTypestringTEXT_BASED או IMAGE_BASED
statestringREADY (טקסט) או PROCESSING (OCR)
numberOfPagesnumberסך עמודים ב-PDF

בדיקת סטטוס עיבוד

POST
/bank-statement/status

בדקו את סטטוס העיבוד של קבצים מועלים. השתמשו בנקודת קצה זו לסקר להשלמת OCR.

דוגמת בקשה

curl
curl -X POST https://api.balanzio.app/api/v1/bank-statement/status \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "uuids": ["550e8400-e29b-41d4-a716-446655440000"]
  }'

תשובה (200 OK)

json
[
  {
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "filename": "statement.pdf",
    "pdfType": "IMAGE_BASED",
    "state": "COMPLETED",
    "numberOfPages": 3,
    "progress": 100
  }
]

המרה לפורמט

POST
/bank-statement/convert

המירו דוחות מעובדים לפורמט CSV, XLSX או JSON.

פרמטרי שאילתה

פרמטרסוגנדרשתיאור
formatstringכןCSV, XLSX, או JSON

דוגמת בקשה (CSV)

curl
curl -X POST "https://api.balanzio.app/api/v1/bank-statement/convert?format=CSV" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "uuid": "550e8400-e29b-41d4-a716-446655440000"
  }' \
  -o statement.csv

דוגמת בקשה (JSON)

curl
curl -X POST "https://api.balanzio.app/api/v1/bank-statement/convert?format=JSON" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "uuid": "550e8400-e29b-41d4-a716-446655440000"
  }'

תשובה (פורמט JSON)

json
{
  "transactions": [
    {
      "date": "2024-01-15",
      "description": "VIREMENT SALAIRE",
      "amount": 3500.00,
      "balance": 4250.50,
      "currency": "EUR"
    },
    {
      "date": "2024-01-16",
      "description": "CARTE 12/01 SUPERMARCHE",
      "amount": -85.30,
      "balance": 4165.20,
      "currency": "EUR"
    }
  ],
  "metadata": {
    "bank": "BNP Paribas",
    "accountNumber": "****1234",
    "statementPeriod": "2024-01"
  },
  "warnings": []
}

הגדרת סיסמת PDF

POST
/bank-statement/set-password

ספקו סיסמה ל-PDF מוגן בסיסמה.

דוגמת בקשה

curl
curl -X POST https://api.balanzio.app/api/v1/bank-statement/set-password \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "password": "mySecretPassword123"
  }'

תשובה (200 OK)

json
{
  "uuid": "550e8400-e29b-41d4-a716-446655440000",
  "state": "READY",
  "passwordSet": true
}

קבלת מידע משתמש

GET
/user

אחזרו מידע משתמש נוכחי, כולל קרדיטים ופרטי תוכנית.

דוגמת בקשה

curl
curl -X GET https://api.balanzio.app/api/v1/user \
  -H "Authorization: Bearer YOUR_API_KEY"

תשובה (200 OK)

json
{
  "user": {
    "userId": 123,
    "firstName": "John",
    "lastName": "Doe",
    "email": "john@example.com",
    "emailVerified": true,
    "referralCode": "ABC123"
  },
  "credits": {
    "paidCredits": 1000,
    "freeCredits": 50
  },
  "unlimitedCredits": false,
  "subscriptionCount": 1,
  "plan": "pro",
  "saveConvertedFiles": false,
  "hasPaymentMethod": true
}

קודי שגיאה

כל השגיאות מחזירות תשובת JSON עם קוד שגיאה והודעה:

json
{
  "error": "INVALID_FILE_TYPE",
  "message": "Only PDF files are accepted",
  "recovery": "Please upload a PDF file"
}
סטטוסקוד שגיאהתיאור
400
INVALID_FILE_TYPEהקובץ אינו PDF
400
INVALID_FORMATפרמטר פורמט לא חוקי (חייב להיות CSV, XLSX, או JSON)
401
UNAUTHORIZEDמפתח API לא חוקי או חסר
403
INSUFFICIENT_CREDITSאין מספיק קרדיטים לעיבוד הקובץ
404
FILE_NOT_FOUNDUUID הקובץ לא נמצא
413
FILE_TOO_LARGEהקובץ עולה על מגבלת 3MB
422
PASSWORD_REQUIREDה-PDF מוגן בסיסמה
422
INVALID_PASSWORDסיסמת PDF שגויה
429
RATE_LIMIT_EXCEEDEDיותר מדי בקשות
500
INTERNAL_ERRORשגיאת שרת, אנא נסו שוב

מגבלות קצב

משתמשים אנונימיים

10 בקשות לדקה

1 עמוד ליום

ללא העלאות בו-זמניות

משתמשים מאומתים

60 בקשות לדקה

מבוסס קרדיט (תלוי בתוכנית)

עד 5 העלאות בו-זמניות

כותרות מגבלת קצב: כל התשובות כוללות כותרות X-RateLimit-Limit, X-RateLimit-Remaining ו-X-RateLimit-Reset.

דוגמאות קוד מלאות

Python

python
import requests
import time

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.balanzio.app/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Upload PDF
with open("statement.pdf", "rb") as f:
    files = {"files": f}
    response = requests.post(
        f"{BASE_URL}/bank-statement",
        headers=HEADERS,
        files=files
    )
    data = response.json()
    file_uuid = data[0]["uuid"]
    pdf_type = data[0]["pdfType"]
    print(f"Uploaded: {file_uuid} ({pdf_type})")

# 2. Poll status if OCR is needed
if pdf_type == "IMAGE_BASED":
    while True:
        response = requests.post(
            f"{BASE_URL}/bank-statement/status",
            headers=HEADERS,
            json={"uuids": [file_uuid]}
        )
        status = response.json()[0]
        if status["state"] == "COMPLETED":
            print("Processing complete!")
            break
        elif status["state"] == "ERROR":
            print("Processing failed:", status.get("error"))
            break
        print(f"Progress: {status.get('progress', 0)}%")
        time.sleep(3)

# 3. Convert to JSON
response = requests.post(
    f"{BASE_URL}/bank-statement/convert",
    headers=HEADERS,
    params={"format": "JSON"},
    json={"uuid": file_uuid}
)

transactions = response.json()
print(f"Found {len(transactions['transactions'])} transactions")
for txn in transactions["transactions"]:
    print(f"{txn['date']}: {txn['description']} - {txn['amount']} {txn['currency']}")

Node.js

javascript
const FormData = require('form-data');
const fs = require('fs');
const fetch = require('node-fetch');

const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://api.balanzio.app/api/v1';
const HEADERS = { 'Authorization': `Bearer ${API_KEY}` };

async function convertBankStatement() {
  // 1. Upload PDF
  const form = new FormData();
  form.append('files', fs.createReadStream('statement.pdf'));

  let response = await fetch(`${BASE_URL}/bank-statement`, {
    method: 'POST',
    headers: HEADERS,
    body: form
  });

  const uploadData = await response.json();
  const fileUuid = uploadData[0].uuid;
  const pdfType = uploadData[0].pdfType;
  console.log(`Uploaded: ${fileUuid} (${pdfType})`);

  // 2. Poll status if OCR needed
  if (pdfType === 'IMAGE_BASED') {
    let completed = false;
    while (!completed) {
      response = await fetch(`${BASE_URL}/bank-statement/status`, {
        method: 'POST',
        headers: { ...HEADERS, 'Content-Type': 'application/json' },
        body: JSON.stringify({ uuids: [fileUuid] })
      });

      const statusData = await response.json();
      const status = statusData[0];

      if (status.state === 'COMPLETED') {
        console.log('Processing complete!');
        completed = true;
      } else if (status.state === 'ERROR') {
        throw new Error(`Processing failed: ${status.error}`);
      } else {
        console.log(`Progress: ${status.progress || 0}%`);
        await new Promise(resolve => setTimeout(resolve, 3000));
      }
    }
  }

  // 3. Convert to JSON
  response = await fetch(
    `${BASE_URL}/bank-statement/convert?format=JSON`,
    {
      method: 'POST',
      headers: { ...HEADERS, 'Content-Type': 'application/json' },
      body: JSON.stringify({ uuid: fileUuid })
    }
  );

  const transactions = await response.json();
  console.log(`Found ${transactions.transactions.length} transactions`);

  transactions.transactions.forEach(txn => {
    console.log(`${txn.date}: ${txn.description} - ${txn.amount} ${txn.currency}`);
  });
}

convertBankStatement().catch(console.error);

PHP

php
<?php

$apiKey = 'YOUR_API_KEY';
$baseUrl = 'https://api.balanzio.app/api/v1';

// 1. Upload PDF
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$baseUrl/bank-statement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $apiKey"
]);

$file = new CURLFile('statement.pdf', 'application/pdf', 'statement.pdf');
curl_setopt($ch, CURLOPT_POSTFIELDS, ['files' => $file]);

$response = curl_exec($ch);
$data = json_decode($response, true);
$fileUuid = $data[0]['uuid'];
$pdfType = $data[0]['pdfType'];

echo "Uploaded: $fileUuid ($pdfType)\n";

// 2. Poll status if OCR needed
if ($pdfType === 'IMAGE_BASED') {
    do {
        sleep(3);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "$baseUrl/bank-statement/status");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Authorization: Bearer $apiKey",
            "Content-Type: application/json"
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
            'uuids' => [$fileUuid]
        ]));

        $response = curl_exec($ch);
        $statusData = json_decode($response, true);
        $status = $statusData[0];

        echo "Progress: " . ($status['progress'] ?? 0) . "%\n";
    } while ($status['state'] !== 'COMPLETED' && $status['state'] !== 'ERROR');

    echo "Processing complete!\n";
}

// 3. Convert to JSON
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$baseUrl/bank-statement/convert?format=JSON");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $apiKey",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'uuid' => $fileUuid
]));

$response = curl_exec($ch);
$transactions = json_decode($response, true);

echo "Found " . count($transactions['transactions']) . " transactions\n";

foreach ($transactions['transactions'] as $txn) {
    echo "{$txn['date']}: {$txn['description']} - {$txn['amount']} {$txn['currency']}\n";
}

curl_close($ch);
?>

צריכים עזרה?

תמיכה

צוות התמיכה שלנו כאן כדי לעזור לכם להשתלב בהצלחה.

אוסף Postman

הורידו את אוסף Postman שלנו לבדיקת כל נקודות הקצה בקלות.