Geliştiriciler

Hızlı başlayan, ölçeklenebilir entegrasyon deneyimi

Bu sayfa kavramsal quickstart, webhook yaklaşımı ve statik örnek snippet'lerle hazırlanmıştır.

Quickstart

  1. Kurumsal hesap kaynaklarını tanımlayın ve kimlik bilgilerini yönetin.
  2. Hesap, bakiye ve hareket endpoint'leriyle veri akışını doğrulayın.
  3. Webhook endpoint'inizi imza doğrulama ile aktif edin.
  4. Mutabakat akışında örnek sınıflandırma kurallarıyla başlatın.

Webhook Akışı

  • Her olay bir `event_id` ve zaman damgası ile gelir.
  • Teslimat imzasını doğrulayıp idempotent işleyin.
  • Yanıt süresini kısa tutup ağır işlemleri kuyruğa alın.
Detaylı Dokümanlara Git
Hesap & Bakiye
type AccountBalance = {
  accountId: string;
  ibanMasked: string;
  currency: "TRY" | "USD" | "EUR";
  available: number;
  booked: number;
  asOf: string;
};

export async function listBalances(): Promise<AccountBalance[]> {
  // Gerçek projede burada banka.pro API istemcisi çağrılır.
  return [
    {
      accountId: "acc_01",
      ibanMasked: "TR12••••••9012",
      currency: "TRY",
      available: 124500.42,
      booked: 121980.10,
      asOf: "2026-02-21T09:15:00Z",
    },
  ];
}
Webhook İşleyici
type WebhookEvent = {
  eventId: string;
  type: "transaction.created" | "balance.updated";
  occurredAt: string;
  payload: Record<string, unknown>;
};

export function verifySignature(signature: string, rawBody: string): boolean {
  // Örnek akış: HMAC doğrulaması
  return signature.length > 0 && rawBody.length > 0;
}

export function handleWebhook(event: WebhookEvent) {
  if (event.type === "transaction.created") {
    // Idempotent işleme
  }
}
Mutabakat Sınıflandırma
type MatchRule = {
  id: string;
  description: string;
  predicate: (line: { amount: number; description: string }) => boolean;
};

const rules: MatchRule[] = [
  {
    id: "fee",
    description: "Banka masrafı işlemlerini işaretle",
    predicate: (line) => /masraf|komisyon/i.test(line.description),
  },
];

export function classifyLine(line: { amount: number; description: string }) {
  return rules.find((rule) => rule.predicate(line))?.id ?? "manual_review";
}