e-Gider Pusulası

API

Entegratör API Endpoint Referansı

Entegratörün doğrudan ERP/API entegrasyonunda kullandığı belge endpointleri, alan sözleşmeleri ve yanıt örnekleri.

Portal UI mı arıyorsunuz? Portalın belge oluşturma/güncelleme akışı, doğrulama endpointleri ve gerçek kişi cari sözleşmeleri ayrı bir sayfada anlatılır: Portal API Endpoint Referansı.

API Endpointlerini detaylı bir şekilde incelemek için swagger dokümantasyonuna ulaşabilirsiniz

https://edonusumtestgpapi.vbt.com.tr/swagger/ui/index

Kimlik Doğrulama

API çağrıları, firmanın yetki bağlamı ve oturum token'ı üzerinden ilerler; bu alanda kullanılacak header ve token akışı netleştirilir.

💡 Tüm istekler VbtAuthorization header'ı gerektirir. Token almak için POST /api/Account/Token kullanın.
POST/api/Account/Token

Oturum token'ı alır. Tüm diğer endpointler bu token'ı VbtAuthorization header'ında bekler.

RequestTokenRequestModel{ Email, Password }
ResponseTokenResponseModel{ Token }

Alan Zorunluluk Matrisi

Request modeli, zorunlu alanlar ile senaryoya bağlı alanları birlikte taşır. Aşağıdaki matris GİB belge sözleşmesini gösterir. VerificationInfo ve VerificationProvider doğrudan entegrasyonlarda eksiksiz gönderilmelidir.

AlanSATISIADE YüzYüzeIADE KargoNot
ExpenseVoucherExternalIdZZZTekil kimlik
ExpenseVoucherTypeCodeZZZSATIS/IADE
VerificationMethodSMSSMS / IADEKODUIADEKODUGİB yöntem alanlarını platform üretir
ProfileIdZZZGIDERPUSULASI
DocumentCurrencyCodeZZZISO 4217
IssueDateZZZ
VerificationProviderKKKDoğrudan ERP/API için zorunlu
VerificationInfoKKKDoğrudan ERP/API için zorunlu
AccountingCustomerPartyZZZ
LegalMonetaryTotalZZZ
TaxTotalZZZ
ExpenseVoucherLineZZZMin 1 kalem
ReturnedDocumentReferenceZZIADE'de
CargoCompanyCodeZKargo iade
DelegateReceiverOOVekalet
UUIdOOOBoşsa üretilir
ExpenseVoucherNumberOOOBoşsa üretilir

Z Zorunlu · O Opsiyonel · Ş Şartlı

Ekleme

Yeni e-Gider Pusulası oluşturma çağrıları, belge içeriğini, doğrulama bilgisini ve senaryo detaylarını platforma teslim eder.

POST/api/ExpenseVoucherApi/AddOutgoingExpenseVoucher

Yeni bir e-Gider Pusulası oluşturur ve sisteme kaydeder.

RequestOutgoingExpenseVoucherRequestModel
ResponseOutgoingExpenseVoucherAddResponseModel
Başarılı Yanıt{ ExpenseVoucherNumber, Ettn, HasError, Errors[] }
Entegratör kuralıVerificationInfo ve VerificationProvider, seçilen senaryoya uygun ve eksiksiz gönderilmelidir.
POST/api/ExpenseVoucherApi/AddOutgoingExpenseVoucherByUbl

Yeni e-Gider Pusulasını hazır UBL belgesiyle oluşturur.

AlanBeklenti
ExpenseVoucherExternalIdEntegratör sistemindeki benzersiz belge kimliği gönderilmelidir.
FileBytesTam UBL XML veya ZIP içeriği Base64 olarak gönderilmelidir.
IsZippedFileBytes ZIP ise true, doğrudan XML ise false gönderilmelidir.
IsSignedYalnızca gerçekten imzalanmış UBL için true gönderilmelidir. Bu durumda belge Signed kullanıcı durumuyla içe alınır.
EArchiveMailToBilgilendirme adresi varsa gönderilebilir.
UBL içeriğiAltı sağlayıcı/doğrulama değeri ilgili Contact düğümlerinde eksiksiz bulunmalıdır.
ResponseOutgoingExpenseVoucherAddResponseModel
Request örneği
{
  "ExpenseVoucherExternalId": "ERP-GP-2026-145",
  "FileBytes": "BASE64_ENCODED_UBL_XML",
  "IsZipped": false,
  "IsSigned": false,
  "EArchiveMailTo": "muhasebe@example.com"
}

FileBytes içindeki UBL'nin sağlayıcı ve doğrulama alanları hazır UBL örneklerinde gösterilir.

POST/api/ExpenseVoucherApi/PreviewOutgoingExpenseVoucher

Gider Pusulasını kaydetmeden önizleme yapar. Doğrulama ve format kontrollerini içerir.

RequestOutgoingExpenseVoucherRequestModel
ResponseOutgoingExpenseVoucherPreviewResponseModel{ ExpenseVoucherPdfFileBytes, HasError, Errors[] }
ERP/API çağrısıÖnizleme kayıt oluşturmasa da belge validasyonunu çalıştırır; doğrulama alanları eksiksiz gönderilmelidir.
Portal çağrısıDoğrulama alanları boş bırakılabilir. Önizleme belgeyi kaydetmez veya doğrulama sürecini tamamlamaz; gerçek kayıt sonrasında Portal akışı ayrıca yürütülür.

Güncelleme

Güncelleme işlemleri, belge kesinleşmeden önceki düzeltme ihtiyacını karşılar; imza ve rapor durumu bu işlemin doğal sınırını belirler.

POST/api/ExpenseVoucherApi/UpdateOutgoingExpenseVoucher

Mevcut bir Gider Pusulasını günceller. Belge henüz imzalanmamış olmalıdır.

RequestOutgoingExpenseVoucherRequestModel (Id veya UUId zorunlu)
ResponseOutgoingExpenseVoucherUpdateResponseModel{ ExpenseVoucherNumber, Ettn, HasError, Errors[] }
Doğrulama kuralıÖnceki doğrulama bilgisinin korunacağı varsayılmamalıdır. Güncel VerificationInfo ve VerificationProvider request içinde yeniden gönderilmelidir.
POST/api/ExpenseVoucherApi/UpdateOutgoingExpenseVoucherByUbl

Mevcut e-Gider Pusulasını güncel UBL belgesiyle değiştirir.

AlanBeklenti
ExpenseVoucherExternalIdGüncellenecek mevcut belgeyi bulmak için aynı harici kimlik gönderilmelidir.
FileBytesYalnız değişen alanlar değil, güncel belgenin tamamını içeren UBL XML veya ZIP Base64 olarak gönderilmelidir.
IsZippedGönderilen içeriğin XML/ZIP biçimiyle uyumlu olmalıdır.
IsSignedYalnız gerçekten imzalanmış güncel UBL için true gönderilmelidir.
EArchiveMailToGüncel bilgilendirme adresi varsa gönderilebilir.
UBL içeriğiÖnceki doğrulama bilgisi miras alınmaz; altı alan güncel UBL içinde yeniden ve eksiksiz sağlanmalıdır.
ResponseOutgoingExpenseVoucherUpdateResponseModel
Request örneği
{
  "ExpenseVoucherExternalId": "ERP-GP-2026-145",
  "FileBytes": "BASE64_ENCODED_CURRENT_UBL_XML_OR_ZIP",
  "IsZipped": true,
  "IsSigned": false,
  "EArchiveMailTo": "muhasebe@example.com"
}

Örnekteki FileBytes, eski UBL'ye uygulanacak bir yama değil; doğrulama alanları dahil güncel belgenin tamamıdır.

JSON ve UBL güncellemeleri tam belge sözleşmesidir: Yalnızca değişen doğrulama alanlarını göndermek veya eski doğrulama bilgisinin korunacağını varsaymak güvenli değildir. Güncel belge ve senaryoya ait doğrulama alanları birlikte gönderilmelidir.

İptal

İptal çağrısı, düzenlenmiş e-Gider Pusulası'nın durumuna göre değerlendirilir; platform yalnızca iptal için uygun belgelerde süreci başlatır.

POST/api/ExpenseVoucherApi/CancelOutgoingExpenseVoucher

İptale uygun durumdaki e-Gider Pusulasını iptal eder. Kod gönderilmişse bildirim denenir; raporlanmış belgede iptal raporu oluşturulur.

Ön koşulWaitingForVerification, WaitingForSmsCode veya imzalanmış belge iptal edilebilir. İmzalama aşamasında olup henüz imzalanmamış belge reddedilir. Belgenin platformda kayıtlı e-Arşiv durumu ayrıca Valid olmalıdır; istemci request içinde durum göndermez.
RequestExpenseVoucherCancelRequestModel{ Id, ExpenseVoucherExternalId, Ettn, ExpenseVoucherNumber, EArchiveCancelDescription }. Belge kimliği alanlarından en az biri gönderilmelidir; öncelik sırası Id, ExpenseVoucherExternalId, Ettn, ExpenseVoucherNumber şeklindedir.
Responsebool

Sorgulama & Görüntüleme

Sorgulama uçları, oluşturulmuş belgelerin durumunu, görüntüleme çıktısını ve teknik paket bilgisini aynı referans altında toplar.

GET/api/ExpenseVoucherApi/GetOutgoingExpenseVoucher?id={ettn}

Belge detay bilgisi. ETTN ile sorgulanır; tüm bilgiler döner.

Parametreid (query) — Elektronik Belge Takip Numarası (ETTN)
ResponseOutgoingExpenseVoucherResponseModel
POST/api/ExpenseVoucherApi/GetOutgoingExpenseVoucherList

Gider Pusulası özet bilgilerini içeren liste. Entegratör sorgusu için uygundur.

RequestSearchRequestModel<OutgoingExpenseVoucherGetRequestModel>{ Query: { UUId, ExpenseVoucherNumber, IssueDate... }, Skip, Take }
ResponseSearchResponseModel<OutgoingExpenseVoucherSummaryResponseModel>
POST/api/ExpenseVoucherApi/GetOutgoingExpenseVoucherPdf

Belgenin PDF formatındaki görselini döner.

RequestExpenseVoucherPdfRequestModel{ ExpenseVoucherEttns: ["ettn1", "ettn2"...] }
ResponseExpenseVoucherPdfResponseModel{ ExpenseVoucherPdfFileBytes } (base64)
POST/api/ExpenseVoucherApi/GetOutgoingExpenseVoucherView

Belgenin HTML görüntüsünü döner (iframe içinde gösterim için).

RequestExpenseVoucherViewRequestModel{ Ettn, IsRead }
ResponseExpenseVoucherViewResponseModel{ ExpenseVoucherHtmlView }

Kargo Şirketi

Kargo iadelerinde kullanılacak şirket bilgisi platform referanslarından seçilir; bu uç, geçerli kargo kayıtlarını entegrasyon tarafına açar.

GET/api/CargoCompanies/GetAll

Platformda tanımlı kargo şirketlerini listeler. JSON çağrısında Code; hazır UBL çağrısında VKN, unvan, yetki belge no ve adres alanları referans alınır.

AlanTipAçıklama
IdintKayıt Id
CodestringKargo şirketi kodu — bu değeri CargoCompanyCode olarak göndereceksiniz
TitlestringKargo şirketi unvanı
VKNstringVergi Kimlik Numarası
ClassificationCodestringYetki Belge No
CityNamestringŞehir
CitySubdivisionNamestringİlçe
CountryNamestringÜlke
⚠️ Kargo Şirketi Akışı
Entegratör kargo iadesi yaparken:
JSON: CargoCompanies/GetAll çağır → listeden Code seç → CargoCompanyCode alanına yaz. Platform kendi ürettiği UBL'de diğer alanları tamamlar.
Hazır UBL: Aynı endpoint kaydındaki VKN, unvan, yetki belge no, şehir, ilçe ve ülke değerlerini değiştirmeden DeliveryParty içine yaz. Platform hazır UBL'yi değiştirmez; uyumsuz içeriği EGP0087 ile reddeder.
💡 DelegateReceiver varsa Contact yeri değişir: Normalde VerificationInfoAccountingCustomerParty/Party/Contact altına yazılır. DelegateReceiver dolu gönderildiğinde aynı doğrulama bilgisi UBL içinde BuyerCustomerParty/Party/Contact altına taşınır. GİB raporundaki aliciBilgileri/bilgiDetay ise her durumda belge oluşturma veya güncelleme anında kaydedilen VerificationInfo kaynağından üretilir.

Alt Modeller

Ekleme ve güncelleme çağrılarında geçen doğrulama, vekalet, iade ve kargo alt modelleri burada tek başlık altında toplanır.

Doğrulama yöntemi üst modeldedir: VerificationMethod alanı SMS veya IADEKODU alır. GİB'in UBL ve raporda beklediği SMS_PROVIDER/IADE_PROVIDER karşılıklarını platform üretir.

VerificationProvider

SMS veya iade kodu gönderimi için kullanılan üçüncü parti doğrulama sağlayıcısının bilgileri. Entegratörün adı değil, doğrulama hizmetini sağlayan uygulamanın adı ve VKN'si yazılır. UBL'de AccountingSupplierParty/Party/Contact/OtherCommunication altına, GİB raporunda operatorUygulamaBilgi alanına taşınır. Doğrudan entegrasyonlarda eksiksiz gönderilmelidir.

AlanTipGeçerli Değerler
ApplicationNamestringSerbest
Vknstring10 hane rakam

VerificationInfo

Muhataba iletilen doğrulama bilgisi — SMS kodu veya iade kodu ile bu kodun ilişkilendirildiği telefon. Doğrudan entegrasyonlarda VerificationProvider ile birlikte eksiksiz gönderilmelidir. UBL'de AccountingCustomerParty/Party/Contact altına yazılır (vekalet varsa BuyerCustomerParty/Party/Contact); GİB raporunda aliciBilgileri/bilgiDetay alanına yansır.

AlanTipGeçerli Değerler
CodestringSerbest
PhoneNumberstring0XXXXXXXXXX

DelegateReceiver (doluysa 3 alan zorunlu)

Vekil kişi bilgisi — iade edilecek ürünü orijinal alıcı yerine teslim eden kişi. Yalnızca IADE belgelerinde kullanılır. Kimlik tipi, kimlik değeri ve ad birlikte gönderilmelidir. Doğrulama kodu, tipi ve telefon bu modelde tekrarlanmaz; ayrı VerificationInfo modelinde taşınır.

AlanTipGeçerli Değerler
PartyIdintYalnız Portal seçimi için; doğrudan entegrasyon ve UBL akışında zorunlu değildir
IdentificationstringTCKN veya pasaport no
IdentificationTypestringTCKN, PASAPORTNO
NamestringSerbest

ReturnedDocumentReference (IADE'de zorunlu)

İadeye konu olan orijinal belgenin referansı — hangi belgeye karşılık iade yapıldığını tanımlar. IADE belgelerinde zorunlu, SATIS'te kullanılmaz. UBL'de BillingReference/InvoiceDocumentReference olarak, GİB raporunda iadeDetay alanına yazılır. BELGESIZ iadede DocumentNumber boş bırakılabilir ancak alıcının gerçek kimliği zorunludur.

AlanTipNot
DocumentTypestringZEARSIV_FATURA / SATIS_FISI / BELGESIZ
DocumentNumberstringŞBELGESIZ'de boş olabilir
IssueDatestringZyyyy-MM-dd

CargoCompany (kargo iadede zorunlu)

Kargo ile yapılan iadelerde kullanılan kargo şirketi bilgisi. Entegratör bu modeli doğrudan doldurmaz — sadece CargoCompanyCode alanına kargo firmasının kodunu yazar. Platform, bu koda karşılık gelen aşağıdaki bilgileri tamamlar ve UBL'de Delivery/DeliveryParty alanına yazar:

AlanTipAçıklama
CodestringKargo firma kodu (entegratörün gönderdiği)
TitlestringFirma unvanı
VKNstring10 hane
ClassificationCodestringYetki belge no

Enum Değerleri

API modellerinde kullanılan sabit değerler burada kısa bağlamıyla yer alır; enumların business anlamı, hata kodlarıyla ilişkisi ve validasyon referansları Teknik Referans sayfasında takip edilir.

Response — Belge Detay

Belge detay response'u, teknik durum bilgisiyle iş verisini birlikte döner; alan açıklamaları bu ayrımı görünür kılar.

AlanTipAçıklama
IdintBelge Id
UUIdstringETTN
ExpenseVoucherExternalIdstringTekil kimlik
ExpenseVoucherNumberstringBelge no
ExpenseVoucherTypeCodestringSATIS/IADE
VerificationMethodstringSMS/IADEKODU
DocumentCurrencyCodestringPara birimi
IssueDateDateTimeDüzenleme tarihi
OutgoingExpenseVoucherStatusstringBelge durumu
PayableAmountdecimalÖdenecek tutar
TaxTotalAmountdecimalToplam vergi
AccountingCustomerPartyNamestringAlıcı adı
AccountingCustomerPartyIdentificationNumberstringKimlik no
AccountingCustomerPartySchemeIdstringKimlik tipi
SigningTimeDateTime?İmza zamanı
EArchiveReportStatusintRapor durumu
VerificationProviderobjectOperatör
VerificationInfoobjectDoğrulama
DelegateReceiverobject?Vekil
ReturnedDocumentReferenceobject?İade belgesi
TaxTotalarrayVergi
ExpenseVoucherLinearrayKalemler

Belge Detay ve Liste Yanıtları

Belge detay ve liste yanıtlarına OutgoingExpenseVoucherStatusForUser alanını içerir. Bu alan SMS ve iade kodu bekleme adımlarını kullanıcıya açıklar; OutgoingExpenseVoucherStatus teknik belge durumunu taşımaya devam eder.

DeğerNe zaman görülür?Entegratör nasıl yorumlamalı?
ExpenseVoucherAndXmlCreatedDoğrulama bilgisi eksiksiz kabul edildiğinde veya Portal doğrulaması tamamlandığındaBelge ve XML oluşturulmuştur; imza süreci takip edilmelidir. Bu değer henüz Signed anlamına gelmez.
WaitingForVerificationPortal belgeyi doğrulama verisi olmadan kaydettiğindePortal kullanıcısının senaryoya uygun doğrulama yöntemini tamamlaması beklenir. Doğrudan entegrasyonun başarılı gönderim sonucu değildir.
WaitingForSmsCodePortal SMS'i başarıyla gönderdikten sonraKod doğrulanmadan belge imza sürecine ilerlemez. ERP bu durumu kendi SMS çağrısını başlatma talebi olarak yorumlamamalıdır.
SignedBelge imzalandığındaBelge GİB'e gönderime hazırdır; doğrulama adımı tamamlanmıştır.

Yanıt Örnekleri

Oluşturma ve güncelleme endpointlerinde iş sonucu Data.HasError üzerinden değerlendirilmelidir. HTTP çağrısının tamamlanması tek başına belgenin kabul edildiği anlamına gelmez.

Yanıt biçimiNerede görülür?Başarı kararı
Data.HasErrorBelge oluşturma ve güncelleme endpointlerifalse ise işlem başarılıdır; true ise Data.Errors okunmalıdır.
ErrorCode içeren API hata zarfıPortalın SMS ve iade kodu işlemleriAkış, değişebilecek mesaj metnine değil hata koduna göre yönlendirilmelidir.

Başarılı oluşturma yanıtı

{
  "RefreshToken": "",
  "Data": {
    "HasError": false,
    "Errors": [],
    "ExpenseVoucherNumber": "GIP2026000000145",
    "Ettn": "550e8400-e29b-41d4-a716-446655440000"
  }
}
Başarı kararı: Belgenin kabul edildiği kararı Data.HasError = false üzerinden verilmelidir. Belge numarası ve ETTN aynı Data nesnesinden okunmalıdır.

Başarısız oluşturma yanıtı

Doğrudan entegrasyonda doğrulama alanlarından biri eksik veya uyumsuz gönderilirse oluşturma ya da güncelleme sonucu aşağıdaki biçimde döner.

{
  "RefreshToken": "",
  "Data": {
    "HasError": true,
    "Errors": [
      {
        "ErrorCode": "SCM0002",
        "ErrorMessage": "VerificationProvider.Vkn zorunlu bir elemandır boş geçilemez!"
      }
    ],
    "ExpenseVoucherNumber": null,
    "Ettn": null
  }
}
Başarısız kabul: Data.HasError = true ise belge kabul edilmiş sayılmamalıdır. Eksik veya uyumsuz alanlar düzeltilerek request yeniden gönderilmelidir.

Portal doğrulama endpointi hata yanıtı

Portal işlemleri mevcut API hata zarfını kullanır. Entegrasyon bu endpointleri çağırmamalı; hata ayrımında HTTP durumuyla birlikte ErrorCode dikkate alınmalıdır. Portal endpointlerinin tam sözleşmesi Portal API Endpoint Referansı sayfasındadır.

{
  "Type": 2,
  "Type_Desc": "Business",
  "ErrorCode": "EGP0072",
  "Message": "Telefon numarası geçerli formatta değildir.",
  "Detail": null
}