e-Gider Pusulası

API

Portal API Endpoint Referansı

Portal UI'ın belge oluşturma, doğrulama ve gerçek kişi cari akışlarında kullandığı endpoint sözleşmeleri.

Entegratör mü arıyorsunuz? Bu sayfa yalnızca VBT Portal uygulamasının kendi kullanımı içindir. Doğrudan ERP/API entegrasyonu için Entegratör API Endpoint Referansı sayfasına bakın.

Belge Oluşturma ve Güncelleme

Portal UI, entegratörlerle aynı AddOutgoingExpenseVoucher ve UpdateOutgoingExpenseVoucher endpointlerini kullanır. SMS sonradan Portal endpointleriyle tamamlanabilir; İADEKODU ise belge Add/Update modeli içinde gönderilir.

AdımPortal UI davranışı
1. Cari seçimiAlıcı ve varsa vekil PersonParty endpointleriyle aranır veya kaydedilir.
2. Belge kaydıSeçilen alıcı AccountingCustomerParty.Party.Id, varsa vekil DelegateReceiver.PartyId ile Add/Update request'ine taşınır. Kullanıcının seçtiği tek TCKN veya PASAPORTNO belge kimliği olarak gönderilir.
3. İlk yanıtYalnız unsigned SMS akışında VerificationInfo ve VerificationProvider tamamen boş olabilir. İADEKODU seçildiyse iki model ilk Add/Update isteğinde tamdır. UI, response içindeki OutgoingExpenseVoucherStatusForUser değerini esas alır.
4. DoğrulamaWaitingForVerification yalnız SMS gönderiminin beklendiğini gösterir; Send ve Complete çağrıları kullanılır. İADEKODU için ayrı Portal endpointi yoktur.
5. Güncel durumBaşarılı işlemden sonra belge yeniden sorgulanır; imzaya hazır veya bekleyen güncel durum gösterilir.
Portal Add/Update alan özeti
{
  "AccountingCustomerParty": {
    "Party": {
      "Id": 12345,
      "PartyIdentifications": [
        { "SchemeId": "PASAPORTNO", "Value": "U12345678" }
      ]
    }
  },
  "DelegateReceiver": {
    "PartyId": 67890
  },
  "VerificationInfo": null,
  "VerificationProvider": null
}

Bu parça tam belge request'i değildir; yalnız Portalın cari ve doğrulama sınırını gösterir. Belgenin diğer zorunlu alanları aynı Add/Update sözleşmesinde gönderilmelidir.

Doğrulama Endpointleri

Portal kullanıcısına hazır sunulan doğrulama ekranları, aşağıdaki endpoint sözleşmeleri üzerinden ilerler. Bu endpointler VBT Portal uygulamasının kullanımı içindir; dış entegratörlerin belge oluşturma ve güncelleme sözleşmelerinin yerini almaz.

Görünürlük: UI, doğrulama kontrollerini belgenin dönen durumu ve senaryosuna göre gösterir. WaitingForVerification SMS gönderme ekranını, WaitingForSmsCode SMS kodu girişini açar.
POST/api/ExpenseVoucherApi/SendExpenseVoucherSmsCode

Satış veya SMS seçilmiş yüz yüze iade senaryosunda doğrulama kodunu gönderir.

Çağrı koşuluBelge WaitingForVerification veya telefon düzeltme/yeniden gönderim için WaitingForSmsCode durumundadır; senaryo SMS doğrulamasına izin verir.
RequestSendExpenseVoucherSmsCodeRequestModel — belge kimliği alanlarından en az biri ve PhoneNumber
ResponseSendExpenseVoucherSmsCodeResponseModelMaskedPhoneNumber, VerificationToken, ExpiresInSeconds
UI davranışıMaskeli telefon ve kalan süre gösterilir; token kullanıcıya gösterilmeden kod doğrulama çağrısına taşınır.
POST/api/ExpenseVoucherApi/CompleteExpenseVoucherSmsVerification

SMS gönderiminden dönen token ile kullanıcının girdiği kodu doğrular.

Çağrı koşuluBelge WaitingForSmsCode durumundadır.
RequestVerifyExpenseVoucherSmsCodeRequestModel — aynı belge kimliği, VerificationToken ve Code
ResponseResponseModel<bool>
UI davranışıBaşarılı sonuçta belge yeniden okunur ve güncel state gösterilir; hata halinde doğrulanmış görünümü verilmez.
İADEKODU akışı: Ayrı bir Portal submit endpointi yoktur. UI, VerificationProvider ve VerificationInfo alanlarını tam belge modeliyle birlikte AddOutgoingExpenseVoucher veya UpdateOutgoingExpenseVoucher çağrısında gönderir. Geçerli İADEKODU verisi belgeyi SMS adımlarına sokmadan imza kuyruğuna taşır; kargolu IADE bu alanlar olmadan kaydedilemez.
İstemci davranışı: Devam eden çağrı sırasında aynı aksiyon yeniden tetiklenmez. İş kuralı hatasında API'nin kullanıcıya dönük mesajı gösterilir ve belge başarılı yanıt alınmadan bir sonraki state'e geçirilmez. Güncel durum için işlem sonrasında belge yeniden sorgulanır.

Gerçek Kişi Cari Endpointleri

İşlem sırası: Portal önce ad, TCKN veya PASAPORTNO ile arama yapmalıdır. Kayıt bulunursa response içindeki gerçek Party.Id ile Update; bulunamazsa Add çağrılmalıdır. Public cari API'sinde Save/upsert endpointi yoktur.
GET/api/PersonParty/GetPartyListByNameAndType?partyName={partyName}

Ad, TCKN veya pasaport numarasıyla gerçek kişi carilerini arar.

RequestQuery string içinde partyName değeri — ad, TCKN veya PASAPORTNO içerebilir
ResponseResponseModel<IList<PartyResponseModel>>
UI davranışıYalnız Customer, Supplier ve CustomerAndSupplier rollerindeki gerçek kişiler gösterilir. Arama carinin rolünü değiştirmez.
Çağrı ve seçim örneği
GET /api/PersonParty/GetPartyListByNameAndType?partyName=U12345678

Kayıt bulunursa Data[].Id, Update request'ine ve belge request'indeki ilgili cari Id alanına taşınır.

GET/api/PersonParty/Get?id={id}

Firma kapsamındaki gerçek kişi cari detayını getirir.

RequestQuery string içinde cari id değeri
ResponseResponseModel<PartyResponseModel>
UI davranışıPerson, Contact, PostalAddress ve PartyIdentifications alanları forma taşınır.
POST/api/PersonParty/Add

Customer rolünde yeni gerçek kişi carisi oluşturur.

Çağrı koşuluTCKN veya PASAPORTNO ile yapılan aramada mevcut cari bulunamamıştır.
RequestPartyRequestModelPartyName, Person, Contact, PostalAddress ve PartyIdentifications
ResponseResponseModel<PartyResponseModel>
KuralEn az bir TCKN veya PASAPORTNO bulunmalıdır. Add mevcut kimliği otomatik güncellemez.
Yeni gerçek kişi request'i
{
  "Id": 0,
  "PartyName": "ÖRNEK KİŞİ",
  "PartyIdentifications": [
    { "SchemeId": "PASAPORTNO", "Value": "U12345678" }
  ],
  "Person": {
    "FirstName": "ÖRNEK",
    "FamilyName": "KİŞİ",
    "NationalityId": "TR"
  },
  "Contact": {
    "Telephone": "05551112233",
    "ElectronicMail": "ornek.kisi@example.com"
  },
  "PostalAddress": {
    "StreetName": "Örnek Caddesi",
    "BuildingNumber": "12",
    "CitySubdivisionName": "Kadıköy",
    "CityName": "İstanbul",
    "Country": { "Name": "Türkiye" }
  }
}
POST/api/PersonParty/Update

Arama veya detay response'undan seçilen gerçek kişi carisini günceller.

Çağrı koşuluMevcut cari seçilmiştir ve response'taki Id korunmuştur.
RequestPartyRequestModel — geçerli Id ve güncel cari modeli
ResponseResponseModel<PartyResponseModel>
UI davranışıUpdate bir patch değildir. Form, Get veya Search response'undan alınan korunacak alanlarla birlikte güncel modeli göndermelidir.
GET/api/PersonParty/Delete?id={id}

Firma kapsamındaki gerçek kişi carisini ve bağlı kimlik kayıtlarını siler.

RequestQuery string içinde cari id değeri
ResponseResponseModel<bool>
SonuçCari ve bağlı TCKN/PASAPORTNO kayıtları aynı işlem içinde silinir.

Gerçek Kişi Kimlik Endpointleri

İlk kimlikler cari Add/Update request'indeki PartyIdentifications alanıyla taşınır. Kayıtlı carinin kimliklerini sonradan ayrı yönetmek için aşağıdaki endpointler kullanılır.

GET/api/PersonPartyIdentification/Get?partyId={id}

Carinin aktif TCKN ve PASAPORTNO kayıtlarını, kimlik kayıt Id'leriyle birlikte getirir. Update veya Delete öncesinde kullanılacak kimlik Id'si bu response'tan alınmalıdır.

POST/api/PersonPartyIdentification/Add

Mevcut gerçek kişi carisine yeni bir TCKN veya PASAPORTNO ekler.

RequestPartyIdentificationRequestModelPartyId, SchemeId, Value
ResponseResponseModel<PartyIdentificationResponseModel>
POST/api/PersonPartyIdentification/Update

Mevcut kimlik kaydını günceller.

RequestPartyIdentificationRequestModel — mevcut kimliğin Id değeri, PartyId, SchemeId, Value
ResponseResponseModel<PartyIdentificationResponseModel>
GET/api/PersonPartyIdentification/Delete?id={id}

Seçilen kimlik kaydını siler. Carinin son aktif kişi kimliği silinemez.

RequestQuery string içinde kimlik kaydının id değeri
ResponseResponseModel<bool>
Kimlik özeti: Kimlik Add, Update veya Delete işleminden sonra carinin IdentityOrTaxNumber değeri TCKN önceliğiyle güncellenir. Cari üzerinde TCKN ve PASAPORTNO birlikte bulunabilir; aynı scheme altında iki farklı aktif değer bulunamaz. Silinen kimlik tarihçe olarak korunur; aynı SchemeId ve Value yeniden eklenirse yeni bir aktif kimlik kaydı oluşturulur.

PersonParty Hata Kodları

KodKarşılaşılabilecek durum
PTY0001Update çağrısında geçerli bir cari Id gönderilmemiştir.
PPY0001Cari adı gönderilmemiştir.
PPY0003Gerçek kişi carisi için TCKN veya PASAPORTNO gönderilmemiştir.
PPY0004Kimlik tipi TCKN veya PASAPORTNO değildir.
PPY0005Kimlik aynı firmadaki başka bir caride aktiftir.
PPY0006Carinin son aktif kişi kimliği kaldırılmak istenmiştir.
PPY0007Cari rolü PersonParty kullanımına uygun değildir.
PPY0008Seçilen cari gerçek kişi carisi değildir.
PPY0009Pasaport numarası 9 karakter sınırını aşmıştır.
PTYI0001Belirtilen kimlik kaydı bulunamamıştır (PersonPartyIdentification/Update veya Delete).
PTYI0009TCKN 11 haneli sayısal değer değildir.
PTYI0010Kimlik Value alanı boş gönderilmiştir.
PTYI0017Aynı caride aynı SchemeId için birden fazla farklı değer gönderilmiştir.
Portal belge request'i: Alıcı cari Id'si AccountingCustomerParty.Party.Id alanına, seçilen tek TCKN veya PASAPORTNO PartyIdentifications içine yazılır. Vekil cari Id'si DelegateReceiver.PartyId alanına eklenir.
Belge sınırı: Cari bilgileri belge oluşturma veya güncelleme anında request'e kopyalanır. Cari kartında daha sonra yapılan değişiklikler mevcut belgeyi, arşiv XML'ini veya GİB raporunu değiştirmez.