Skip to content

Register - Başvuru Oluşturma

Ödeal'da bir üye işyeri oluşturmak ve oluşturulan üye iş yerine bir terminal tanımlayabilmek için kullanılan, POST metoduyla çalışan servistir.

Servise iletilen isteğin başarılı olması durumunda, servis registerRefCode değeri döndürür. registerRefCode değeri Ödeal üzerinde oluşan Başvuru ID'sini temsil etmektedir.

API Reference: Create Register

Notlar

  • Register'a istekte bulunmadan önce ilgili başvuru için gerekli evrakların v1/files servisine iletilip, files servisinden alınan response'taki fileId değerinin Register endpoint'indeki files objesi içerisindeki content alanına yazılmalıdır.
  • Bir istekte 1'den fazla satış isteği iletilmemelidir. Herbir istek içerisinde sadece 1 hizmet (salesInfo/service) olmalı, aynı hizmet için birden fazla cihaz eklemesi yapılabilmektedir.
  • Bir başvuru içerisinde birden fazla cihaz talebinde bulunulabilinir. Bunun için devices bölümü çoklanarak istek gönderilebilir. Tek bir cihaz üzerinden işlem yapılacaksa devices bölümünde bir dizi göndermek yeterlidir.
  • Ödeal bu servis aracılığıyla bilgileri aldığı anda, standart onboarding operasyonel sürecini başlatır. Bu süre yaklaşık 3 iş günüdür.
  • Bu süre zarfında servis aracılığıyla gönderilen verilerde Ödeal sistemi üzerinde değişiklik yapılabilir. Bu sebeple bundan sonraki tüm süreç servis içeriğinde iletilen bir alana değil, registerRefCode şeklinde üretilen yeni bir değere bağlanmıştır.
  • Operasyonel süreç Ödeal tarafından olumsuz (sebebi ile birlikte) ya da olumlu sonuçlanırsa bu servisin çıktısı olarak verilen registerRefCode ile aşağıdaki Lead Callback servisi ile iş ortağına iletilir. Ya da iş ortağı Register Status başlığı altından endpoint ile başvuru durumunu registerRefCode / externalRegistrationId ile sorgulayabilir.
  • customInfo alanında üye işyerine ait verilerden herhangi birinin, iş ortağının isteğine bağlı değerler gönderilmesi sağlanabilir.
  • files, üye işyeriyle ilgili hardcopy dokümanların dijital ortama alındığı ve aktarımının yapıldığı alandır.
  • TerminalPhysicalSerialNumber, iş ortağının üye işyerine teslim ettiği bir cihaz varsa kullanılır, yoksa boş olarak gönderilebilir.
  • TerminalSerialNumber, Ödeal ve bankalar tarafında POS'ların tanımlı olacağı mali no değeridir.
  • Gönderilen isteklerde kullanıcı bilgisine göre cashRegisterType, routingModel bölümlerinde kısıtlamalar mevcuttur. Kullanıcının kendi iş ortağı dışında bu alanlar için farklı bir değer gönderme durumunda hata alınacaktır.

Alan Listesi

companyInfo (Şirket Bilgileri)

AlanTürZorunlulukFormat / ValidasyonAçıklamaÖrnek
businessTypestringOpsiyonel"INDIVIDUAL", "CORPORATE"İşyeri türü"CORPORATE"
tcCitizenbooleanZorunlutrue / falseTC vatandaşı mı?true
tcNumberstringZorunlu (koşullu*)Tam olarak 11 rakamTC Kimlik Numarası"11111111111"
taxNumberstringZorunlu10 veya 11 rakamVergi numarası"2222222222"
ibanstringZorunluTR + 24 rakam (toplam 26 karakter)İşyeri IBAN numarası"TR030006262254937598445356"
firstNamestringZorunluMaks. 100 karakterYetkili adı"Ahmet"
lastNamestringZorunluMaks. 100 karakterYetkili soyadı"Yılmaz"
mobilestringZorunlu10 rakam, 5XXXXXXXXX formatı (başında 0 yok)Cep telefonu numarası"5555555555"
emailstringZorunluGeçerli e-posta formatıE-posta adresi"[email protected]"
companyTitlestringZorunluFirma / şirket unvanı"Ahmet Yılmaz Tic. A.Ş."
brandNamestringZorunluMarka / tabela adı"Ahmet Marketi"
mccCodestringZorunlu4-6 haneli sayısal kodMerchant Category Code"5411"
phonestringZorunlu10 rakam (başında 0 yok)Sabit telefon numarası"2120000101"
citystringZorunluBüyük/küçük harf duyarlı; Ödeal kaydında olmalıİşyeri ili"İstanbul"
townstringZorunluBüyük/küçük harf duyarlı; il ile tutarlı olmalıİşyeri ilçesi"Bahçelievler"
addressstringZorunluİşyeri adresi"Fevzi Çakmak Mah. Erenler Sok. No:39"
routingModelstringOpsiyonel (kanal kısıtlı)"MODEL0", "MODEL1", "MODEL2"İşlem yönlendirme modeli (kanal izni gerekli)"MODEL0"
externalMerchantIdstringOpsiyonelİş ortağı sistemindeki üye işyeri ID'si"merchant-001"
externalRegistrationIdstringOpsiyonelİş ortağı sistemindeki başvuru ID'si (idempotency için)"app-20240101-001"
naceCodestringOpsiyonelNACE faaliyet kodu"4711"
birthDatestringOpsiyonelISO 8601 tarih-saat formatıYetkili doğum tarihi"1990-05-15T00:00:00Z"
businessOperationstringOpsiyonelİşyeri faaliyet açıklaması"Perakende gıda satışı"

* Koşullu Zorunluluk: businessType = "INDIVIDUAL" (şahıs şirketi) olduğunda tcNumber (TCKN) zorunludur. Detaylar için Koşullu Zorunluluk bölümüne bakın.


salesInfo (Satış Bilgileri)

AlanTürZorunlulukAlabileceği DeğerlerAçıklamaÖrnek
typestringZorunlu"LOAN", "CASH", "DEFERRED", "OWN_CASH_REGISTER"Satış tipi (yazar kasa entegrasyonunda yalnızca "LOAN" kullanılır)"LOAN"
servicestringZorunlu"EDOC_POS", "PHY_POS", "SanalPOS", "CeptePOS"Sunulacak hizmet türü"EDOC_POS"
notestringOpsiyonelSerbest metinBaşvuruya özel notlar"Öncelikli kurulum"
onboardingTypestringOpsiyonelOnboarding türü

devices (Cihaz Bilgileri)

Her dizi elemanı bir cihazı temsil eder. Birden fazla cihaz için diziyi çoklayın.

AlanTürZorunlulukAlabileceği Değerler / ValidasyonAçıklamaÖrnek
setupCitystringZorunluBüyük/küçük harf duyarlı; Ödeal kaydında olmalıCihaz kurulum ili"İstanbul"
setupTownstringZorunluİl ile tutarlı olmalıCihaz kurulum ilçesi"Bahçelievler"
setupAddressstringZorunluCihaz kurulum adresi"Fevzi Çakmak Mah. No:39"
posInstallmentTypebooleanZorunlutrue (taksitli) / false (tek çekim)POS taksit yapılandırmasıtrue
cashRegisterTypestringOpsiyonel (kanal kısıtlı)"A920Pro", "D230", "A910", "A910S", "5000F", "S920"Cihaz modeli"A910"
efaturaIntegratorstringOpsiyonel"ODEAL" (tek geçerli değer)E-Fatura entegratörü"ODEAL"
externalDeviceIdstringOpsiyonelİş ortağı sistemindeki cihaz ID'si"device-001"
terminalSerialNumberstringOpsiyonelTerminal mali seri numarası (banka POS tanımı için)"PAX721000018"
terminalPhysicalSerialNumberstringOpsiyonelCihazın fiziksel seri numarası"SN123456789"
uniqueDeviceKeystringOpsiyonelCihaz benzersiz anahtarı
refundTypestringOpsiyonel"Iban", "Odeal Kart"İade / geri ödeme türü. Seçime göre koşullu alanlar zorunlu olur (bkz. aşağıda)"Iban"
campaignstringKoşullu*refundType = "Iban" ise zorunlu. Uygulanacak kampanya kodu"2.99"
websiteLinkstringOpsiyonelGeçerli URLİşyeri web sitesi"https://example.com"
mobileAppLinkstringOpsiyonelGeçerli URLMobil uygulama linki
averageDeliveryTimeintegerOpsiyonelPozitif tam sayıOrtalama teslimat süresi (gün)3
purposeOfUsestringOpsiyonelCihaz kullanım amacı
cardTypestringKoşullu*refundType = "Odeal Kart" ise zorunlu. Kart türü
cardDeliveryCitystringKoşullu*refundType = "Odeal Kart" ise zorunlu. Kart teslimat ili"İstanbul"
cardDeliveryTownstringKoşullu*refundType = "Odeal Kart" ise zorunlu. Kart teslimat ilçesi"Kadıköy"
cardDeliveryAddressstringKoşullu*refundType = "Odeal Kart" ise zorunlu. Kart teslimat adresi"Moda Cad. No:5"
personReceivingDevicestringOpsiyonelCihazı teslim alacak kişi"Ahmet Yılmaz"
tcknOnCardstringKoşullu*11 rakamrefundType = "Odeal Kart" ise zorunlu. Kart üzerindeki TCKN"11111111111"
nameOnCardstringKoşullu*refundType = "Odeal Kart" ise zorunlu. Kart üzerindeki ad"Ahmet"
lastNameOnCardstringKoşullu*refundType = "Odeal Kart" ise zorunlu. Kart üzerindeki soyad"Yılmaz"
birthDateOnCardstringKoşullu*ISO 8601 tarih-saatrefundType = "Odeal Kart" ise zorunlu. Kart sahibi doğum tarihi"1990-05-15"
phoneNumberOnCardstringKoşullu*refundType = "Odeal Kart" ise zorunlu. Kart sahibi telefon numarası"5321234567"

files (Evrak Bilgileri)

Dosya yüklemeden önce /files endpoint'i kullanılarak fileId alınmalıdır.

AlanTürZorunlulukAlabileceği DeğerlerAçıklamaÖrnek
sourcestringZorunlu"rest", "ftp"Dosya kaynağı (rest = API üzerinden, ftp = FTP sunucusundan)"rest"
typestringZorunlu"identity", "identityBack", "signature", "taxPlate", "contract1", "contract2", "gmuRegister", "edocSignature", "hazirunCetveli", "adiOrtaklikSozlesmesi", "interiorPhotoOfStore", "externalPhotoOfStore", "ekKartHamiliForm", "identityPartner1", "identityBackPartner1", "identityPartner2", "identityBackPartner2", "identityPartner3", "identityBackPartner3"Evrak türü"identity"
contentstringZorunlu/files endpoint'inden alınan fileId (UUID formatı)Yüklenen dosyaya referans"21d01292-68d1-48ab-bedf-1a6f95eb7827"

customInfo (Özel Bilgiler)

İş ortağına özel, serbest formatlı key-value çiftleri. Raporlama ve takip amaçlı kullanılabilir.

AlanTürZorunlulukAçıklamaÖrnek
customInfoobjectOpsiyonelSerbest metin key-value çiftleri{ "orderId": "987654", "branchCode": "0001" }

Koşullu Zorunluluk

Bazı alanlar, diğer alanların değerine bağlı olarak zorunlu hale gelir:

KoşulZorunlu Olan AlanAçıklama
businessType = "INDIVIDUAL"tcNumber (TCKN)Şahıs şirketlerinde TC Kimlik Numarası zorunludur
businessType = "CORPORATE"taxNumberTüzel şirketlerde vergi numarası zorunludur
salesInfo.service = "EDOC_POS"efaturaIntegrator (devices içinde)E-Belge + POS çözümünde e-fatura entegratörü gereklidir
tcCitizen = truetcNumberTC vatandaşı için TCKN zorunludur
devices[].refundType = "Iban"devices[].campaignIBAN ile iade seçildiğinde kampanya kodu zorunludur
devices[].refundType = "Odeal Kart"devices[].cardType, cardDeliveryCity, cardDeliveryTown, cardDeliveryAddress, tcknOnCard, nameOnCard, lastNameOnCard, birthDateOnCard, phoneNumberOnCardÖdeal Kart ile iade seçildiğinde tüm kart bilgileri zorunludur

Edge Case'ler ve Özel Davranışlar

External ID Idempotency — Aynı externalRegistrationId Tekrar Gönderilirse

externalRegistrationId alanı idempotency anahtarı olarak davranır. Aynı externalRegistrationId değeri tekrar gönderildiğinde yeni bir başvuru oluşturulmaz; mevcut başvurunun registerRefCode'u döner.

KRİTİK DAVRANIŞ

Her yeni başvuru için externalRegistrationId mutlaka farklı gönderilmelidir. Aynı değer gönderilirse aynı registerRefCode döner ve yeni bir başvuru oluşturulmaz.

Senaryo:

1. İstek: externalRegistrationId = "app-20240101-001"
   → Yeni başvuru oluşturulur → registerRefCode: "aaa-bbb-ccc-..."

2. Aynı istek: externalRegistrationId = "app-20240101-001"
   → Yeni başvuru oluşturulmaz → Aynı registerRefCode döner: "aaa-bbb-ccc-..."

Öneri: externalRegistrationId için zaman damgalı veya UUID tabanlı benzersiz bir değer üretin:

"externalRegistrationId": "app-{YYYYMMDD}-{uuid}"

routingModel ve cashRegisterType Kanal Kısıtlaması

Bu alanlar için yalnızca iş ortağınıza tanımlanmış değerler geçerlidir. Farklı bir değer gönderildiğinde:

  • REG-ROUTINGMODEL-2: RoutingModel bilgisi hatalı
  • REG-DEVICE-CASH-REGISTER-TYPE-1: Cihaz modeli hatalı

Hata Kodları

KoduAçıklama
GENE1Beklenmedik bir hata oluştu
REG-1Başvuru alanı boş bırakılamaz
Request boş gönderildiği durumda bu hata alınır.
REG-CITY-1İl boş bırakılamaz
REG-CITY-2Girmiş olduğunuz il kayıtlarımızda bulunmuyor
REG-TOWN-1İlçe boş bırakılamaz
REG-TOWN-2Girmiş olduğunuz ilçe kayıtlarımızda bulunmuyor
REG-IBAN-1Iban boş bırakılamaz
REG-IBAN-2Girilen iban formatı geçersiz
REG-TYPE-1Satış tipi boş olmaz
REG-TYPE-2Satış tipi hatalı
REG-SALES-SERVICE-1Servis tipi boş olamaz
REG-SALES-SERVICE-2Servis tipi hatalı
REG-DEVICE-1Cihaz birden fazla olamaz
REG-DEVICE-CITY-1Cihaz kurulum ili boş bırakılamaz
REG-DEVICE-CITY-2Girmiş olduğunuz cihaz kurulum ili kayıtlarımızda bulunmuyor
REG-DEVICE-TOWN-1Cihaz kurulum ilçesi boş bırakılamaz
REG-DEVICE-TOWN-2Girmiş olduğunuz cihaz kurulum ilçesi kayıtlarımızda bulunmuyor
REG-DEVICE-CASH-REGISTER-TYPE-1Cihaz modeli hatalı
REG-DEVICE-CASH-REGISTER-TYPE-2Cihaz modeli boş bırakılamaz
REG-DEVICE-ADDRESS-1Cihaz kurulum adresi boş bırakılamaz
REG-DEVICE-EFATURA-INTEGRATOR-1E-Fatura entegratör bilgisi boş bırakılamaz
REG-DEVICE-EFATURA-INTEGRATOR-2E-Fatura entegratörü hatalı
Odeal dışında bir değer girildiğinde alınan hatadır
REG-POS-INSTALLMENT-TYPE-1Pos taksit durumu hatalı
REG-TAX-NUMBER-1Vergi numarası boş bırakılamaz
REG-TAX-NUMBER-2Vergi numarası en az 10 en fazla 11 adet rakamdan oluşmalıdır
REG-MOBILE-1Cep telefonu numarası boş bırakılamaz
REG-MOBILE-2Cep telefonu numarası 5AABBBCCDD formatında olmalıdır
REG-TCKN-1TCKN boş bırakılamaz
REG-TCKN-2Girilen TCKN formatı geçersiz
REG-ROUTINGMODEL-1RoutingModel bilgisi boş olamaz
REG-ROUTINGMODEL-2RoutingModel bilgisi hatalı
REG-EXTERNAL-REGISTRATION-ID-1İş ortağı başvuru ID'si boş olamaz
99999Gönderilen json payload içeriği hatalı

Payload Örnekleri

Minimal Payload — Zorunlu Alanlar

json
{
  "companyInfo": {
    "businessType": "INDIVIDUAL",
    "tcCitizen": true,
    "tcNumber": "11111111111",
    "taxNumber": "2222222222",
    "iban": "TR030006262254937598445356",
    "firstName": "Ahmet",
    "lastName": "Yılmaz",
    "mobile": "5555555555",
    "email": "[email protected]",
    "companyTitle": "Ahmet Yılmaz",
    "brandName": "Ahmet Marketi",
    "mccCode": "5411",
    "phone": "2120000101",
    "city": "İstanbul",
    "town": "Bahçelievler",
    "address": "Fevzi Çakmak Mah. Erenler Sok. No:39 Bahçelievler/İstanbul",
    "routingModel": "MODEL0"
  },
  "salesInfo": {
    "type": "LOAN",
    "service": "EDOC_POS"
  },
  "devices": [
    {
      "cashRegisterType": "A910",
      "efaturaIntegrator": "ODEAL",
      "posInstallmentType": false,
      "setupCity": "İstanbul",
      "setupTown": "Bahçelievler",
      "setupAddress": "Fevzi Çakmak Mah. Erenler Sok. No:39 Bahçelievler/İstanbul"
    }
  ]
}

Full Payload — Tüm Alanlar

json
{
  "files": [
    { "source": "rest", "type": "identity",      "content": "21d01292-68d1-48ab-bedf-1a6f95eb7827" },
    { "source": "rest", "type": "signature",     "content": "1b88bf73-fe32-4cd9-a18e-89f8c1669574" },
    { "source": "rest", "type": "taxPlate",      "content": "47faa8d3-9fd9-45f4-ae80-29a9ea2d1cb4" },
    { "source": "rest", "type": "gmuRegister",   "content": "99f967c9-7e31-491f-b044-bd0d10aa226f" },
    { "source": "rest", "type": "edocSignature", "content": "fc775f55-6bdd-48be-bd34-6aeccad05a40" },
    { "source": "rest", "type": "contract1",     "content": "4a57a9a2-0d52-4ada-aa84-0ce726428c4e" },
    { "source": "rest", "type": "contract2",     "content": "c4756dd5-a2d7-4aeb-93a4-e53b1503991d" }
  ],
  "companyInfo": {
    "businessType": "CORPORATE",
    "tcCitizen": true,
    "tcNumber": "11111111111",
    "taxNumber": "2222222222",
    "externalMerchantId": "merchant-001",
    "externalRegistrationId": "app-20240101-001",
    "iban": "TR030006262254937598445356",
    "firstName": "Ahmet",
    "lastName": "Yılmaz",
    "mobile": "5555555555",
    "email": "[email protected]",
    "companyTitle": "Yılmaz Ticaret A.Ş.",
    "brandName": "Yılmaz Marketi",
    "mccCode": "5411",
    "phone": "2120000101",
    "city": "İstanbul",
    "town": "Bahçelievler",
    "address": "Fevzi Çakmak Mah. Erenler Sok. No:39 Bahçelievler/İstanbul",
    "routingModel": "MODEL0"
  },
  "salesInfo": {
    "type": "LOAN",
    "service": "EDOC_POS",
    "note": "Öncelikli kurulum talebi"
  },
  "customInfo": {
    "orderId": "987654",
    "branchCode": "0001",
    "salesPerson": "Ahmet Y."
  },
  "devices": [
    {
      "cashRegisterType": "A910",
      "efaturaIntegrator": "ODEAL",
      "externalDeviceId": "device-001",
      "posInstallmentType": true,
      "setupCity": "İstanbul",
      "setupTown": "Bahçelievler",
      "setupAddress": "Fevzi Çakmak Mah. Erenler Sok. No:39 Bahçelievler/İstanbul",
      "terminalSerialNumber": "PAX721000018",
      "terminalPhysicalSerialNumber": "SN123456789"
    }
  ]
}

Hatalı Payload — Geçersiz routingModel

json
{
  "companyInfo": {
    "routingModel": "MODEL9",
    "...": "..."
  }
}

Response (400):

json
{
  "status": false,
  "message": "Alan ön kontrolleri başarısız",
  "errors": ["REG-ROUTINGMODEL-2: RoutingModel bilgisi hatalı"]
}

Hatalı Payload — Geçersiz efaturaIntegrator

json
{
  "devices": [
    {
      "efaturaIntegrator": "BASKA_FIRMA",
      "...": "..."
    }
  ]
}

Response (400):

json
{
  "status": false,
  "message": "Alan ön kontrolleri başarısız",
  "errors": ["REG-DEVICE-EFATURA-INTEGRATOR-2: E-Fatura entegratörü hatalı"]
}

Örnek Request (Tam)

json
{
  "files": [
    { "source": "rest", "type": "identity",      "content": "21d01292-68d1-48ab-bedf-1a6f95eb7827" },
    { "source": "rest", "type": "signature",     "content": "1b88bf73-fe32-4cd9-a18e-89f8c1669574" },
    { "source": "rest", "type": "taxPlate",      "content": "47faa8d3-9fd9-45f4-ae80-29a9ea2d1cb4" },
    { "source": "rest", "type": "gmuRegister",   "content": "99f967c9-7e31-491f-b044-bd0d10aa226f" },
    { "source": "rest", "type": "edocSignature", "content": "fc775f55-6bdd-48be-bd34-6aeccad05a40" },
    { "source": "rest", "type": "contract1",     "content": "4a57a9a2-0d52-4ada-aa84-0ce726428c4e" },
    { "source": "rest", "type": "contract2",     "content": "c4756dd5-a2d7-4aeb-93a4-e53b1503991d" }
  ],
  "companyInfo": {
    "businessType": "CORPORATE",
    "tcCitizen": true,
    "tcNumber": "11111111111",
    "taxNumber": "2222222222",
    "externalMerchantId": "merchant-001",
    "externalRegistrationId": "app-20240101-001",
    "iban": "TR030006262254937598445356",
    "firstName": "Ahmet",
    "lastName": "Yılmaz",
    "mobile": "5555555555",
    "email": "[email protected]",
    "companyTitle": "Yılmaz Ticaret A.Ş.",
    "brandName": "Yılmaz Marketi",
    "mccCode": "5411",
    "phone": "2120000101",
    "city": "İstanbul",
    "town": "Bahçelievler",
    "address": "Fevzi Çakmak Mah. Erenler Sok. No:39 Bahçelievler/İstanbul",
    "routingModel": "MODEL0"
  },
  "salesInfo": {
    "type": "LOAN",
    "service": "EDOC_POS",
    "note": "Öncelikli kurulum talebi"
  },
  "customInfo": {
    "customKey1": "customValue1",
    "customKey2": "customValue2"
  },
  "devices": [
    {
      "cashRegisterType": "A910",
      "efaturaIntegrator": "ODEAL",
      "externalDeviceId": "device-001",
      "posInstallmentType": true,
      "setupCity": "İstanbul",
      "setupTown": "Bahçelievler",
      "setupAddress": "Fevzi Çakmak Mah. Erenler Sok. No:39 Bahçelievler/İstanbul",
      "terminalSerialNumber": "PAX721000018",
      "terminalPhysicalSerialNumber": "SN123456789"
    }
  ]
}

Ödeal A.Ş.