Giriş
Balanzio API'si, banka ekstresi PDF'lerini yapılandırılmış veri formatlarına (CSV, XLSX, JSON) dönüştürmenize olanak tanır. API'miz hem metin tabanlı hem de görüntü tabanlı (taranmış) PDF'leri OCR işlemeyle destekler.
Hızlı İşleme
Metin PDF'leri saniyeler içinde, OCR <30s/sayfa
Güvenli ve GDPR Uyumlu
24 saat sonra otomatik silme
Çoklu Banka Desteği
100+ desteklenen banka
Kimlik Doğrulama
Tüm API istekleri Bearer belirteci kullanarak kimlik doğrulama gerektirir. API anahtarınızı Authorization başlığına ekleyin:
Authorization: Bearer YOUR_API_KEYAPI anahtarınızı asla istemci taraflı kodda göstermeyin veya sürüm kontrolüne commit etmeyin.
Uç Noktalar
Temel URL
https://api.balanzio.app/api/v1Banka Ekstresi Yükle
/bank-statementİşleme için bir veya birden fazla PDF dosyası yükleyin. API, PDF'nin metin tabanlı mı yoksa görüntü tabanlı (taranmış) mı olduğunu otomatik olarak algılar.
İstek Parametreleri
| Parametre | Tür | Gerekli | Açıklama |
|---|---|---|---|
files | file[] | Evet | İşlenecek PDF dosya(lar)ı (her biri maks. 3MB) |
İstek Örneği
curl -X POST https://api.balanzio.app/api/v1/bank-statement \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "files=@statement.pdf"Yanıt (201 Created)
[
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"filename": "statement.pdf",
"pdfType": "TEXT_BASED",
"state": "READY",
"numberOfPages": 3
}
]Yanıt Alanları
| Alan | Tür | Açıklama |
|---|---|---|
uuid | string | Yüklenen dosya için benzersiz tanımlayıcı |
filename | string | Orijinal dosya adı |
pdfType | string | TEXT_BASED veya IMAGE_BASED |
state | string | READY (metin) veya PROCESSING (OCR) |
numberOfPages | number | PDF'deki toplam sayfa |
İşleme Durumunu Kontrol Et
/bank-statement/statusYüklenen dosyaların işleme durumunu kontrol edin. OCR tamamlanması için yoklamak üzere bu uç noktayı kullanın.
İstek Örneği
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"]
}'Yanıt (200 OK)
[
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"filename": "statement.pdf",
"pdfType": "IMAGE_BASED",
"state": "COMPLETED",
"numberOfPages": 3,
"progress": 100
}
]Formata Dönüştür
/bank-statement/convertİşlenmiş ekstreleri CSV, XLSX veya JSON formatına dönüştürün.
Sorgu Parametreleri
| Parametre | Tür | Gerekli | Açıklama |
|---|---|---|---|
format | string | Evet | CSV, XLSX veya JSON |
İstek Örneği (CSV)
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İstek Örneği (JSON)
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"
}'Yanıt (JSON formatı)
{
"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 Şifresi Belirle
/bank-statement/set-passwordParola korumalı PDF'ler için şifre sağlayın.
İstek Örneği
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"
}'Yanıt (200 OK)
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"state": "READY",
"passwordSet": true
}Kullanıcı Bilgilerini Al
/userKrediler ve plan detayları dahil olmak üzere mevcut kullanıcı bilgilerini alın.
İstek Örneği
curl -X GET https://api.balanzio.app/api/v1/user \
-H "Authorization: Bearer YOUR_API_KEY"Yanıt (200 OK)
{
"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
}Hata Kodları
Tüm hatalar bir hata kodu ve mesajı içeren bir JSON yanıtı döndürür:
{
"error": "INVALID_FILE_TYPE",
"message": "Only PDF files are accepted",
"recovery": "Please upload a PDF file"
}| Durum | Hata Kodu | Açıklama |
|---|---|---|
400 | INVALID_FILE_TYPE | Dosya bir PDF değil |
400 | INVALID_FORMAT | Geçersiz format parametresi (CSV, XLSX veya JSON olmalıdır) |
401 | UNAUTHORIZED | Geçersiz veya eksik API anahtarı |
403 | INSUFFICIENT_CREDITS | Dosyayı işlemek için yeterli kredi yok |
404 | FILE_NOT_FOUND | Dosya UUID'si bulunamadı |
413 | FILE_TOO_LARGE | Dosya 3MB limitini aşıyor |
422 | PASSWORD_REQUIRED | PDF parola korumalı |
422 | INVALID_PASSWORD | Yanlış PDF şifresi |
429 | RATE_LIMIT_EXCEEDED | Çok fazla istek |
500 | INTERNAL_ERROR | Sunucu hatası, lütfen tekrar deneyin |
Hız Limitleri
Anonim Kullanıcılar
• Dakikada 10 istek
• Günde 1 sayfa
• Eşzamanlı yükleme yok
Kimliği Doğrulanmış Kullanıcılar
• Dakikada 60 istek
• Kredi tabanlı (plana bağlı)
• 5'e kadar eşzamanlı yükleme
Hız limiti başlıkları: Tüm yanıtlar X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıklarını içerir.
Eksiksiz Kod Örnekleri
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
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
$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);
?>