API Dokümantasyonu

Balanzio banka ekstresi dönüştürme API'sini entegre etmek için eksiksiz referans

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:

HTTP
Authorization: Bearer YOUR_API_KEY
API anahtarınızı gizli tutun!

API 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/v1

Banka Ekstresi Yükle

POST
/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

ParametreTürGerekliAçıklama
filesfile[]Evetİşlenecek PDF dosya(lar)ı (her biri maks. 3MB)

İstek Örneği

curl
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)

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

Yanıt Alanları

AlanTürAçıklama
uuidstringYüklenen dosya için benzersiz tanımlayıcı
filenamestringOrijinal dosya adı
pdfTypestringTEXT_BASED veya IMAGE_BASED
statestringREADY (metin) veya PROCESSING (OCR)
numberOfPagesnumberPDF'deki toplam sayfa

İşleme Durumunu Kontrol Et

POST
/bank-statement/status

Yüklenen dosyaların işleme durumunu kontrol edin. OCR tamamlanması için yoklamak üzere bu uç noktayı kullanın.

İstek Örneği

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"]
  }'

Yanıt (200 OK)

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

Formata Dönüştür

POST
/bank-statement/convert

İşlenmiş ekstreleri CSV, XLSX veya JSON formatına dönüştürün.

Sorgu Parametreleri

ParametreTürGerekliAçıklama
formatstringEvetCSV, XLSX veya JSON

İstek Örneği (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

İstek Örneği (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"
  }'

Yanıt (JSON formatı)

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 Şifresi Belirle

POST
/bank-statement/set-password

Parola korumalı PDF'ler için şifre sağlayın.

İstek Örneği

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"
  }'

Yanıt (200 OK)

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

Kullanıcı Bilgilerini Al

GET
/user

Krediler ve plan detayları dahil olmak üzere mevcut kullanıcı bilgilerini alın.

İstek Örneği

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

Yanıt (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
}

Hata Kodları

Tüm hatalar bir hata kodu ve mesajı içeren bir JSON yanıtı döndürür:

json
{
  "error": "INVALID_FILE_TYPE",
  "message": "Only PDF files are accepted",
  "recovery": "Please upload a PDF file"
}
DurumHata KoduAçıklama
400
INVALID_FILE_TYPEDosya bir PDF değil
400
INVALID_FORMATGeçersiz format parametresi (CSV, XLSX veya JSON olmalıdır)
401
UNAUTHORIZEDGeçersiz veya eksik API anahtarı
403
INSUFFICIENT_CREDITSDosyayı işlemek için yeterli kredi yok
404
FILE_NOT_FOUNDDosya UUID'si bulunamadı
413
FILE_TOO_LARGEDosya 3MB limitini aşıyor
422
PASSWORD_REQUIREDPDF parola korumalı
422
INVALID_PASSWORDYanlış PDF şifresi
429
RATE_LIMIT_EXCEEDEDÇok fazla istek
500
INTERNAL_ERRORSunucu 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

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);
?>

Yardıma mı ihtiyacınız var?

Destek

Destek ekibimiz başarılı entegrasyon için size yardımcı olmak için burada.

Postman Koleksiyonu

Tüm uç noktaları kolayca test etmek için Postman koleksiyonumuzu indirin.