Blog'a Dön

ERP için Döviz Kuru API'si: NetSuite, SAP ve Dynamics 365'te Kur Otomasyonu

V
Vlado Grigirov
September 03, 2026
Currency API Exchange Rates ERP NetSuite SAP Dynamics 365 Integration

Her çok uluslu finans ekibi er ya da geç aynı duvara çarpar: ERP'nin her yabancı işlem için, her gün, işletmenin dokunduğu her kur çifti için bir döviz kuruna ihtiyacı vardır — ve birileri hâlâ bunları elle giriyordur. Bir ERP için döviz kuru API'si entegrasyonu, günlük kur yüklemesini muhasebe ekibi işe başlamadan önce çalışan zamanlanmış bir işe dönüştürerek bu sorunu çözer. Bu rehber, NetSuite, SAP S/4HANA ve Microsoft Dynamics 365 Finance'in kurları nasıl tükettiğini, üçünü de besleyen tek bir kur hattının nasıl kurulacağını ve yanlış ele alındığında ay sonu kapanışını sessizce bozan uç durumları ele alır.

ERP Sistemlerinin Neden Harici Bir Kur Akışına İhtiyacı Var

Çoklu para birimi etkin olan her ERP kendi döviz kuru tablosunu tutar. NetSuite'te Currency Exchange Rates listesi, SAP'de OB08 işlemi üzerinden yönetilen TCURR tablosu, Dynamics 365 Finance'te ise Currency exchange rates sayfası bulunur. Ana defterinizdeki hiçbir şey doğrudan bir piyasa akışını okumaz — kayıtlar bu iç tabloyu okur.

Bu tasarım bilinçli yapılmıştır ve doğru olanıdır. Finansal kayıtlar yeniden üretilebilir olmalıdır: bir denetçi Mart ayına ait bir yevmiye kaydını yeniden çalıştırırsa, Mart ayında ürettiği ile aynı sayıyı üretmelidir. Tarihli, değiştirilemez kurlardan oluşan bir tablo size bunu sağlar. Canlı bir piyasa çağrısı sağlamaz.

Sorun, bu tablonun nasıl doldurulduğudur. Pratikte üç yaygın yaklaşım vardır:

  1. Elle giriş. Birisi ECB veya bir banka sitesini açar, kurları kopyalar ve elle girer. Bu yavaştır, hataya açıktır ve düzgün şekilde denetlenmesi imkânsızdır — sayının nereden geldiğine dair bir kayıt yoktur.
  2. ERP'nin yerleşik sağlayıcısı. NetSuite, SAP ve Dynamics'in hepsi bir tür yerleşik akışla birlikte gelir. Bunlar çalışır, ancak tedarikçinin seçtiği para birimi kapsamı, kur kaynağı ve güncelleme takvimiyle sınırlı kalırsınız ve diğer sistemlerle mutabakatı zordur.
  3. Zamanlanmış bir işi besleyen özel bir döviz API'si. Kaynağı, zamanlamayı, para birimi listesini ve denetim izini siz kontrol edersiniz — ve aynı akış eş zamanlı olarak faturalandırma platformunuzu, veri ambarınızı ve ERP'nizi besleyebilir.

Bu rehberin kurduğu şey 3. seçenektir. Belirleyici avantaj sistemler arası tutarlılıktır: Stripe faturalandırmanız, BI panolarınız ve ERP'niz aynı anlık görüntüden besleniyorsa, gelir mutabakatınız açıklanamayan kur farkları üretmeyi bırakır.

ERP Düzeyinde Bir Kur Akışının Gereksinimleri

Her döviz API'si muhasebe için uygun değildir. İşlem odaklı akışlar gecikmeyi optimize eder; ERP akışları ise yeniden üretilebilirliği optimize eder. Gerçekten önemli olan şey şudur.

Tik verisi değil, günlük anlık görüntüler

Ana defteriniz saniyenin altında kurlara ihtiyaç duymaz. İhtiyacı olan, tutarlı bir zamanda alınan ve tutarlı şekilde uygulanan, kur çifti başına günde bir yetkili kurdır. Aradığınız saniyeye göre size biraz farklı bir sayı veren bir akış, bir özellik değil, bir risktir. İstediğiniz şey, yeniden çekip aynı cevabı alabileceğiniz istikrarlı bir günlük kapanış değeridir.

Tam geriye dönük doldurmalı geçmiş uç noktası

Geçmiş kurlara sürekli ihtiyaç duyacaksınız: bir kesinti sonrasında geriye dönük doldurma yapmak, önceki dönem bakiyelerini yeniden değerlemek, üç hafta önce tarihli bir kaydı düzeltmek ve denetim taleplerini karşılamak için. Yıllar öncesine giden bir geçmiş döviz kuru API'si pazarlık konusu değildir. Sağlayıcınız yalnızca "en güncel" kuru sunuyorsa, bir oyuncak satın almışsınız demektir.

İnce işlem gören çiftler dahil geniş para birimi kapsamı

Majör çiftler kolaydır. ERP yüklemelerini bozan çiftler, Nairobi'deki bağlı ortaklığınızın veya Vietnamlı tedarikçinizin faturalandığı çiftlerdir. Kapanış sırasında boşluğu keşfetmeden önce sağlayıcınızın uzun kuyruğu kapsadığından emin olun — Finexly 170'in üzerinde para birimini kapsar.

Belirlenimci, belgelenmiş yuvarlama

ERP'ler kurları sabit bir hassasiyette saklar ve her biri farklıdır. Kur hassasiyeti hataları binlerce kayıt boyunca birikir. Yuvarlama kuralınıza bir kez karar verin, belgeleyin ve her yerde aynı şekilde uygulayın — para birimi yuvarlama ve ondalık basamaklar rehberimiz tuzakları ayrıntılı olarak ele alır.

Sahip olduğunuz bir denetim izi

Yüklenen her kur için şunları kaydetmek istersiniz: kaynak, temel ve karşı para birimi, kur, geçerlilik tarihi, çekim zaman damgası ve iş çalıştırma kimliği. Denetçiler "bu nereden geldi?" ve "bunu kim değiştirmiş olabilir?" diye sorar — ve "sanırım ERP'nin yerleşik sağlayıcısından" cevabı zayıf bir cevaptır. Bu, yetkililerin genellikle bir dönem boyunca tutarlı şekilde uygulanan, belirli bir kaynaktan gelen kurları talep ettiği vergi raporlamasında döviz kurları için daha da önemlidir.

Her ERP Kurları Nasıl Tüketir

Hat paylaşılır; yalnızca son teslim adımı sisteme göre farklılık gösterir.

NetSuite

NetSuite üç yol sunar. Yerleşik Currency Exchange Rate Integration özelliği (Setup > Company > Enable Features altında etkinleştirilir) kurları entegre bir sağlayıcıdan günde bir kez otomatik olarak günceller. Import Assistant, bir döviz kuru CSV'sini alır. SuiteScript ise kur kayıtlarını doğrudan yazabilir; kendi kaynağınızı ve kendi zamanlamanızı istiyorsanız izlemeniz gereken yol budur.

API'nizden veri çeken ve currencyrate kayıtları oluşturan zamanlanmış bir SuiteScript 2.x betiği size tam kontrol sağlar:

/**
 * @NApiVersion 2.1
 * @NScriptType ScheduledScript
 */
define(['N/https', 'N/record', 'N/runtime'], (https, record, runtime) => {

  const fetchRates = (base, symbols) => {
    const res = https.get({
      url: `https://api.finexly.com/v1/latest?base=${base}&symbols=${symbols.join(',')}`,
      headers: { Authorization: `Bearer ${runtime.getCurrentScript().getParameter({ name: 'custscript_fx_key' })}` }
    });
    if (res.code !== 200) throw Error(`Finexly returned ${res.code}`);
    return JSON.parse(res.body);
  };

  const execute = () => {
    const base = 'USD';
    const symbols = ['EUR', 'GBP', 'JPY', 'CAD', 'AUD', 'CHF', 'SEK', 'MXN'];
    const payload = fetchRates(base, symbols);

    Object.entries(payload.rates).forEach(([quote, rate]) => {
      const rec = record.create({ type: 'currencyrate' });
      rec.setValue({ fieldId: 'basecurrency', value: currencyIdFor(base) });
      rec.setValue({ fieldId: 'transactioncurrency', value: currencyIdFor(quote) });
      rec.setValue({ fieldId: 'effectivedate', value: new Date(payload.date) });
      rec.setValue({ fieldId: 'exchangerate', value: rate });
      rec.save();
    });
  };

  return { execute };
});

Yönü dikkatlice not edin. NetSuite'in exchangerate alanı, bağlı ortaklık yapılandırmanıza bağlı olarak bazı bağlamlarda kurun işlem para birimi birimi başına temel para birimi birimi olarak, bazılarında ise tersi olarak ifade edilmesini bekler. Bir çifti elle yükleyin, ana defterin ne ürettiğini kontrol edin ve bu yöne uyun — bu, temiz çalışan ama ters yönde kayıt oluşturan bir kur yüklemesinin en yaygın tek nedenidir.

SAP S/4HANA ve ECC

SAP kurları TCURR içinde saklar ve birkaç yükleme yolu sunar. OB08 işlemi kurları elle yönetir. TBD4 işlemi, bir piyasa verisi sağlayıcısından otomatik güncellemeler için standart yoldur. BAPI_EXCHANGERATE_CREATE, kurları programatik olarak yazar; çoğu özel entegrasyon bunu kullanır. Bazı ekipler bunun yerine SAP'nin standart içe aktarma işleminin beklediği piyasa verisi dosyasını oluşturur ve zamanlanmış bir iş için uygulama sunucusuna bırakır.

Dikkat edilmesi gereken iki SAP'ye özgü kavram vardır:

  • Döviz kuru tipleri. SAP; çoğu kayıtta kullanılan M (standart çevirme), B (banka alış), G (banka satış) ve genellikle planlama veya bütçe kurları için özel tipleri birbirinden ayırır. Yalnızca M'yi yüklemek genellikle doğru başlangıçtır; örneğinizde hangi tiplerin gerçekten yapılandırıldığını FI ekibiyle teyit edin.
  • Kur faktörleri. TCURF, bir çift için kaynak/hedef faktörlerini tutar. Büyük sayısal oranlara sahip para birimlerinde (EUR veya USD karşısında JPY, KRW, IDR, VND), faktör genellikle 1:100 veya 1:1000'dir. Eşleşen faktörü ayarlamadan ham bir kur yüklerseniz, tutarlarınız iki veya üç büyüklük mertebesi kadar sapar — ve daha kötüsü, hızlı bir incelemeden geçecek kadar makul görünürler.

Yaygın bir yöntem, API'nizden bir yükleme dosyası oluşturmak ve zamanlanmış bir ABAP işinin bunu tüketmesini sağlamaktır:

import csv
from datetime import date
import requests

API = "https://api.finexly.com/v1/latest"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

BASE = "EUR"
SYMBOLS = ["USD", "GBP", "JPY", "CHF", "PLN", "CZK", "SEK", "NOK"]
RATE_TYPE = "M"

def build_tcurr_load(target: date, path: str) -> None:
    r = requests.get(API, headers=HEADERS,
                     params={"base": BASE, "symbols": ",".join(SYMBOLS)}, timeout=15)
    r.raise_for_status()
    payload = r.json()

    with open(path, "w", newline="") as fh:
        w = csv.writer(fh, delimiter=";")
        for quote, rate in payload["rates"].items():
            # SAP expects the rate at the precision configured for the pair;
            # 5 decimals is a safe default for majors.
            w.writerow([RATE_TYPE, BASE, quote,
                        target.strftime("%Y%m%d"), f"{rate:.5f}"])

build_tcurr_load(date.today(), "/interface/fx/tcurr_load.csv")

Microsoft Dynamics 365 Finance

Dynamics 365 Finance, bir exchange rate provider çerçevesi ve yapılandırılmış bir sağlayıcıdan zamanlanmış olarak veri çeken periyodik bir görev olan Import currency exchange rates ile birlikte gelir. Kutudan çıktığı haliyle birkaç merkez bankası sağlayıcısı sunulur. Çerçeve genişletilebilir: X++ ile özel bir sağlayıcı uygulayarak kendi API'nizi, finans ekibinin zaten kullandığı aynı arayüzde birinci sınıf bir seçenek haline getirebilirsiniz.

X++ yazmak istemiyorsanız, pragmatik alternatif, kurları bir zamanlayıcıyla tetiklenen bir Azure Function veya Logic App aracılığıyla döviz kuru veri varlığını kullanarak Data Management Framework üzerinden aktarmaktır. Bu, entegrasyonu ekibinizin zaten kullandığı bir dilde tutar ve her zamanlama değişikliği için kod dağıtımını gereksiz kılar.

Hattı Kurmak

Hedef ne olursa olsun, işin şekli aynıdır. Bir kez çek, her ERP için dönüştür, yükle, doğrula.

Adım 1: Tek bir anlık görüntü çek

Günde tek bir anlık görüntü çekin ve bunu her alt sistem için tek doğruluk kaynağı olarak ele alın:

curl "https://api.finexly.com/v1/latest?base=USD&symbols=EUR,GBP,JPY,CAD,AUD,CHF" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "base": "USD",
  "date": "2026-09-03",
  "rates": {
    "EUR": 0.8631,
    "GBP": 0.7402,
    "JPY": 151.28,
    "CAD": 1.3574,
    "AUD": 1.4938,
    "CHF": 0.8025
  }
}

Herhangi bir şeyi dönüştürmeden önce bu ham yanıtı olduğu gibi saklayın. Bir kontrolör Kasım ayında Eylül kurunun neden o şekilde olduğunu sorduğunda, kaydedilmiş veri paketi soruyu saniyeler içinde yanıtlar.

Adım 2: ERP'nizin gerçekten ihtiyaç duyduğu çiftleri türetin

API'niz tek bir temel para birimine karşı kurlar döndürür. ERP'nizin GBP→JPY'ye ihtiyacı olabilir ve bağlı ortaklıklarınızın her birinin kendi işlevsel para birimi olabilir. Çapraz kurları her çift için ayrı bir çağrı yapmak yerine tek anlık görüntüden türetin — bu, türetilen her kurun iç tutarlılığını korur ve istek sayınızı düşük tutar:

def cross_rate(rates: dict, base: str, quote: str) -> float:
    """Both legs come from the same snapshot, so the cross is consistent."""
    if base == quote:
        return 1.0
    return rates[quote] / rates[base]

# GBP -> JPY from a USD-based snapshot
gbp_jpy = cross_rate(payload["rates"], "GBP", "JPY")  # 151.28 / 0.7402 = 204.38

Çapraz kurların aritmetiği size yabancı geliyorsa, çapraz döviz kurları konulu açıklayıcı yazımız bunu düzgün bir şekilde anlatır.

Adım 3: Yükle, sonra doğrula

ERP'den gelen başarılı bir HTTP 200 yanıtını asla yüklemenin çalıştığının kanıtı olarak kabul etmeyin. Yazdıktan sonra bir örnek çift kümesini geri okuyun ve anlık görüntüyle karşılaştırın. Üç satırlık bir doğrulama adımı; muhasebe ekibi hatalı verilere karşı kayıt oluşturmadan önce ters yönleri, sessizce düşürülen satırları ve hassasiyet kesilmelerini yakalar.

Adım 4: Makul hata yönetimiyle zamanla

İşi, finans ekibi başlamadan çok önce, hafta içi bir takvimde çalıştırın ve şu davranışları dahil edin:

  • Geri çekilmeli yeniden deneme geçici ağ hatalarında — on dakika içinde üç deneme neredeyse her şeyi çözer.
  • Hiçbir şey yüklememek yerine bilinen son iyi kura geri dönün ve bunu açıkça işaretleyin. Eskimiş ama etiketlenmiş bir kura sahip bir ERP, boşluğu olan bir ERP'den çok daha iyidir.
  • İkinci ardışık hatada bir insanı uyarın. Sessiz kur işi hataları ay sonunda fark edilir ki bu mümkün olan en kötü zamandır.
  • Geri döndüğünde geriye dönük doldurun. İş tekrar ayağa kalktığında, yalnızca bugünün tarihini değil, kaçırılan her tarihi yükleyin. Önbellekleme ve hata yönetimi rehberimiz buradaki genel kalıpları ele alır.

Ay Sonu Kapanışını Bozan Tuzaklar

Hafta sonları ve tatiller. Döviz piyasaları kapanır. Çoğu ERP, Cumartesi günleri de dahil olmak üzere her kayıt tarihi için bir kur bekler. Politikanıza açıkça karar verin — Cuma kurunu ileri taşıyın veya ERP'nin kendi boşluk doldurmasını kullanın — ve bunu belgeleyin, çünkü denetçiler soracaktır.

Ters çevrilmiş kur yönü. Yukarıda NetSuite için ele alındı, ancak risk evrenseldir. Her ERP'nin, saklanan sayının karşı para birimi başına temel para birimi mi yoksa tersi mi olduğu konusunda bir görüşü vardır. Yönün açık olduğu bilinen bir çift üzerinden doğrulayın: USD→JPY 151 yerine 0.0066 olarak çıkıyorsa, tersini yapmışsınız demektir.

Sistemler arası zamanlama uyuşmazlığı. Faturalandırma platformunuz kurların anlık görüntüsünü 00:00 UTC'de alıyor ve ERP işiniz yerel saatle 06:00'da çalışıyorsa, faturalar ve ana defter kayıtları farklı sayılar kullanacak ve biri farkı mutabakat yapmak için bir hafta harcayacaktır. Bir kez anlık görüntü alın, her şeye dağıtın.

Yüksek nominal değerli para birimlerinde kur faktörleri. Yukarıdaki SAP TCURF sorununun başka yerlerde de benzerleri vardır. Temel para biriminin bir biriminin karşı para biriminden binlerce birim satın aldığı her para birimi, özel bir test senaryosunu hak eder.

Geriye dönük düzeltmeler. Bir kur yanlış yüklendiğinde ve kayıtlar zaten yapılmışsa, genellikle tabloyu sadece üzerine yazamazsınız — kayıtlar eski kuru taşır. Düzeltme iş akışını buna ihtiyaç duymadan önce finans ekibinizle planlayın.

Dürüstçe: Kendin Yap mı, Satın Al mı

Bir kur hattı gerçekten az miktarda kod gerektirir — testler dahil birkaç yüz satır. Bir döviz API sağlayıcısından satın aldığınız şey entegrasyon mantığı değil; verinin kendisi, çalışma süresi ve geçmiş arşividir.

Elle girişERP'nin yerleşik sağlayıcısıÖzel API + zamanlanmış iş
Kurulum çabasıYokDüşük1–3 gün
Sürekli çabaGünde 15–30 dkMinimalNeredeyse sıfır
Para birimi kapsamıBaktığınız her şeySağlayıcının listesi170+
Sistemler arası tutarlıHayırHayırEvet
Kendi denetim izinizZayıfSınırlıTam
Geçmişe dönük doldurmaElleSınırlıTam
Daha geniş soruyu tartıyorsanız, döviz kuru verisi için kendin yap mı satın al mı konusunda daha kapsamlı bir incelememiz var. Çoğu ekip için dürüst cevap, entegrasyonun kurmaya değer olduğu ancak verinin kendiniz temin etmeye değmediğidir.

Hat bir kez kurulduğunda, aynı anlık görüntü doğal olarak komşu sistemleri besler — muhasebe yazılımı entegrasyonları, çoklu para birimi faturalama ve BI panoları, hepsi zaten çektiğiniz verinin tam olarak aynısını ister.

Sıkça Sorulan Sorular

ERP kur yüklemesi için ücretsiz bir döviz API'si kullanabilir miyim?

Az sayıda para birimi ve günde bir yükleme yapan küçük bir tüzel kişilik için evet — günde bir çağrı, Finexly'nin ücretsiz planı dahil olmak üzere çoğu ücretsiz katmanın sınırları içindedir. Ücretsiz katmanların tipik olarak sınırladığı şey, tam olarak bir kesinti sonrasında veya denetim sırasında ihtiyaç duyacağınız geçmiş veri derinliği ve geriye dönük doldurma hacmidir. Taahhütte bulunmadan önce geçmiş veri aralığını kontrol edin.

ERP kur yüklemesi ne sıklıkla çalışmalı?

Çoğu kuruluş için iş günü başına bir kez, muhasebe personeli işe başlamadan önce zamanlanmış olarak. Yüksek kur riskine sahip işletmeler, ana defter kayıtları için tek bir günlük kur tutarken bazen işlem düzeyinde fiyatlandırma için ikinci bir gün içi yükleme ekler. Bundan daha sık yapmak, doğruluğu artırmadan mutabakat işi yaratır.

Hangi kuru kullanmalıyım — spot, kapanış veya ortalama?

Hem IFRS hem de US GAAP altında standart uygulama, bireysel işlemler için işlem tarihindeki kur, gelir tablosu kalemleri için ise genellikle bir dönem boyunca ortalama kurdur. Bu karar, mühendislik ekibinizin değil, finans ekibinizin sorumluluğundadır; sizin işiniz, hangi kuru seçerlerse seçsinler onu yeniden üretilebilir şekilde kullanılabilir kılmaktır. İşletme hedging yapıyorsa, spot ve forward kurlar arasındaki ayrım da burada önemlidir.

ERP'nin yerleşik sağlayıcısını değiştirmeli miyim yoksa ikisini birden mi çalıştırmalıyım?

Kısa bir süre için ikisini paralel olarak çalıştırıp çıktıları karşılaştırın — bu, yeni hattınızın mümkün olan en ucuz doğrulamasıdır. Bir hafta boyunca eşleşen sonuçlar aldıktan sonra yerleşik sağlayıcıyı kapatın. İkisini süresiz olarak çalıştırmak, hangi kurun yetkili olduğu konusunda belirsizlik yaratır ki bu, iki seçenekten herhangi birini tek başına kullanmaktan daha kötüdür.

Sağlayıcımın kapsamadığı bir para birimini nasıl ele alırım?

Likit bir ara çift varsa, bunu bir çapraz kurdan türetin. Yoksa — ve bu, uzun kuyruğun ötesinde gerçekten nadir bir durumdur — adlandırılmış bir sorumlu ve tanımlanmış bir kaynakla elle bir süreç belgeleyin. Sessizce vekil bir para birimi ikame etmeyin; bu, iki yıl sonra bir denetimde ortaya çıkacak türden bir şeydir.

Başlayın

Döviz kurlarını ERP'nize elle girmeyi bırakmaya hazır mısınız? Ücretsiz Finexly API anahtarınızı alın — kredi kartı gerekmez. 170'in üzerinde para birimi, geriye dönük doldurma ve denetim için geçmiş veri ve NetSuite, SAP veya Dynamics'e bağlamanın bir öğleden sonra sürdüğü bir REST API elde edersiniz. Ücretsiz planla başlayın, API belgelerini inceleyin ve çağrı hacminiz gerçekten gerektirdiğinde bir ücretli plana geçin.

Vlado Grigirov

Senior Currency Markets Analyst & Financial Strategist

Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...

View full profile →