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/filesservisine iletilip, files servisinden alınan response'takifileIddeğerinin Register endpoint'indekifilesobjesi içerisindekicontentalanı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
devicesbölümü çoklanarak istek gönderilebilir. Tek bir cihaz üzerinden işlem yapılacaksadevicesbö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
registerRefCodeile 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 durumunuregisterRefCode/externalRegistrationIdile sorgulayabilir. customInfoalanı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,routingModelbö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)
| Alan | Tür | Zorunluluk | Format / Validasyon | Açıklama | Örnek |
|---|---|---|---|---|---|
businessType | string | Opsiyonel | "INDIVIDUAL", "CORPORATE" | İşyeri türü | "CORPORATE" |
tcCitizen | boolean | Zorunlu | true / false | TC vatandaşı mı? | true |
tcNumber | string | Zorunlu (koşullu*) | Tam olarak 11 rakam | TC Kimlik Numarası | "11111111111" |
taxNumber | string | Zorunlu | 10 veya 11 rakam | Vergi numarası | "2222222222" |
iban | string | Zorunlu | TR + 24 rakam (toplam 26 karakter) | İşyeri IBAN numarası | "TR030006262254937598445356" |
firstName | string | Zorunlu | Maks. 100 karakter | Yetkili adı | "Ahmet" |
lastName | string | Zorunlu | Maks. 100 karakter | Yetkili soyadı | "Yılmaz" |
mobile | string | Zorunlu | 10 rakam, 5XXXXXXXXX formatı (başında 0 yok) | Cep telefonu numarası | "5555555555" |
email | string | Zorunlu | Geçerli e-posta formatı | E-posta adresi | "[email protected]" |
companyTitle | string | Zorunlu | — | Firma / şirket unvanı | "Ahmet Yılmaz Tic. A.Ş." |
brandName | string | Zorunlu | — | Marka / tabela adı | "Ahmet Marketi" |
mccCode | string | Zorunlu | 4-6 haneli sayısal kod | Merchant Category Code | "5411" |
phone | string | Zorunlu | 10 rakam (başında 0 yok) | Sabit telefon numarası | "2120000101" |
city | string | Zorunlu | Büyük/küçük harf duyarlı; Ödeal kaydında olmalı | İşyeri ili | "İstanbul" |
town | string | Zorunlu | Büyük/küçük harf duyarlı; il ile tutarlı olmalı | İşyeri ilçesi | "Bahçelievler" |
address | string | Zorunlu | — | İşyeri adresi | "Fevzi Çakmak Mah. Erenler Sok. No:39" |
routingModel | string | Opsiyonel (kanal kısıtlı) | "MODEL0", "MODEL1", "MODEL2" | İşlem yönlendirme modeli (kanal izni gerekli) | "MODEL0" |
externalMerchantId | string | Opsiyonel | — | İş ortağı sistemindeki üye işyeri ID'si | "merchant-001" |
externalRegistrationId | string | Opsiyonel | — | İş ortağı sistemindeki başvuru ID'si (idempotency için) | "app-20240101-001" |
naceCode | string | Opsiyonel | — | NACE faaliyet kodu | "4711" |
birthDate | string | Opsiyonel | ISO 8601 tarih-saat formatı | Yetkili doğum tarihi | "1990-05-15T00:00:00Z" |
businessOperation | string | Opsiyonel | — | İşyeri faaliyet açıklaması | "Perakende gıda satışı" |
* Koşullu Zorunluluk:
businessType = "INDIVIDUAL"(şahıs şirketi) olduğundatcNumber(TCKN) zorunludur. Detaylar için Koşullu Zorunluluk bölümüne bakın.
salesInfo (Satış Bilgileri)
| Alan | Tür | Zorunluluk | Alabileceği Değerler | Açıklama | Örnek |
|---|---|---|---|---|---|
type | string | Zorunlu | "LOAN", "CASH", "DEFERRED", "OWN_CASH_REGISTER" | Satış tipi (yazar kasa entegrasyonunda yalnızca "LOAN" kullanılır) | "LOAN" |
service | string | Zorunlu | "EDOC_POS", "PHY_POS", "SanalPOS", "CeptePOS" | Sunulacak hizmet türü | "EDOC_POS" |
note | string | Opsiyonel | Serbest metin | Başvuruya özel notlar | "Öncelikli kurulum" |
onboardingType | string | Opsiyonel | — | Onboarding türü | — |
devices (Cihaz Bilgileri)
Her dizi elemanı bir cihazı temsil eder. Birden fazla cihaz için diziyi çoklayın.
| Alan | Tür | Zorunluluk | Alabileceği Değerler / Validasyon | Açıklama | Örnek |
|---|---|---|---|---|---|
setupCity | string | Zorunlu | Büyük/küçük harf duyarlı; Ödeal kaydında olmalı | Cihaz kurulum ili | "İstanbul" |
setupTown | string | Zorunlu | İl ile tutarlı olmalı | Cihaz kurulum ilçesi | "Bahçelievler" |
setupAddress | string | Zorunlu | — | Cihaz kurulum adresi | "Fevzi Çakmak Mah. No:39" |
posInstallmentType | boolean | Zorunlu | true (taksitli) / false (tek çekim) | POS taksit yapılandırması | true |
cashRegisterType | string | Opsiyonel (kanal kısıtlı) | "A920Pro", "D230", "A910", "A910S", "5000F", "S920" | Cihaz modeli | "A910" |
efaturaIntegrator | string | Opsiyonel | "ODEAL" (tek geçerli değer) | E-Fatura entegratörü | "ODEAL" |
externalDeviceId | string | Opsiyonel | — | İş ortağı sistemindeki cihaz ID'si | "device-001" |
terminalSerialNumber | string | Opsiyonel | — | Terminal mali seri numarası (banka POS tanımı için) | "PAX721000018" |
terminalPhysicalSerialNumber | string | Opsiyonel | — | Cihazın fiziksel seri numarası | "SN123456789" |
uniqueDeviceKey | string | Opsiyonel | — | Cihaz benzersiz anahtarı | — |
refundType | string | Opsiyonel | "Iban", "Odeal Kart" | İade / geri ödeme türü. Seçime göre koşullu alanlar zorunlu olur (bkz. aşağıda) | "Iban" |
campaign | string | Koşullu* | — | refundType = "Iban" ise zorunlu. Uygulanacak kampanya kodu | "2.99" |
websiteLink | string | Opsiyonel | Geçerli URL | İşyeri web sitesi | "https://example.com" |
mobileAppLink | string | Opsiyonel | Geçerli URL | Mobil uygulama linki | — |
averageDeliveryTime | integer | Opsiyonel | Pozitif tam sayı | Ortalama teslimat süresi (gün) | 3 |
purposeOfUse | string | Opsiyonel | — | Cihaz kullanım amacı | — |
cardType | string | Koşullu* | — | refundType = "Odeal Kart" ise zorunlu. Kart türü | — |
cardDeliveryCity | string | Koşullu* | — | refundType = "Odeal Kart" ise zorunlu. Kart teslimat ili | "İstanbul" |
cardDeliveryTown | string | Koşullu* | — | refundType = "Odeal Kart" ise zorunlu. Kart teslimat ilçesi | "Kadıköy" |
cardDeliveryAddress | string | Koşullu* | — | refundType = "Odeal Kart" ise zorunlu. Kart teslimat adresi | "Moda Cad. No:5" |
personReceivingDevice | string | Opsiyonel | — | Cihazı teslim alacak kişi | "Ahmet Yılmaz" |
tcknOnCard | string | Koşullu* | 11 rakam | refundType = "Odeal Kart" ise zorunlu. Kart üzerindeki TCKN | "11111111111" |
nameOnCard | string | Koşullu* | — | refundType = "Odeal Kart" ise zorunlu. Kart üzerindeki ad | "Ahmet" |
lastNameOnCard | string | Koşullu* | — | refundType = "Odeal Kart" ise zorunlu. Kart üzerindeki soyad | "Yılmaz" |
birthDateOnCard | string | Koşullu* | ISO 8601 tarih-saat | refundType = "Odeal Kart" ise zorunlu. Kart sahibi doğum tarihi | "1990-05-15" |
phoneNumberOnCard | string | Koş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.
| Alan | Tür | Zorunluluk | Alabileceği Değerler | Açıklama | Örnek |
|---|---|---|---|---|---|
source | string | Zorunlu | "rest", "ftp" | Dosya kaynağı (rest = API üzerinden, ftp = FTP sunucusundan) | "rest" |
type | string | Zorunlu | "identity", "identityBack", "signature", "taxPlate", "contract1", "contract2", "gmuRegister", "edocSignature", "hazirunCetveli", "adiOrtaklikSozlesmesi", "interiorPhotoOfStore", "externalPhotoOfStore", "ekKartHamiliForm", "identityPartner1", "identityBackPartner1", "identityPartner2", "identityBackPartner2", "identityPartner3", "identityBackPartner3" | Evrak türü | "identity" |
content | string | Zorunlu | /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.
| Alan | Tür | Zorunluluk | Açıklama | Örnek |
|---|---|---|---|---|
customInfo | object | Opsiyonel | Serbest 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şul | Zorunlu Olan Alan | Açıklama |
|---|---|---|
businessType = "INDIVIDUAL" | tcNumber (TCKN) | Şahıs şirketlerinde TC Kimlik Numarası zorunludur |
businessType = "CORPORATE" | taxNumber | Tü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 = true | tcNumber | TC vatandaşı için TCKN zorunludur |
devices[].refundType = "Iban" | devices[].campaign | IBAN 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ı
| Kodu | Açıklama |
|---|---|
| GENE1 | Beklenmedik bir hata oluştu |
| REG-1 | Baş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-2 | Girmiş olduğunuz il kayıtlarımızda bulunmuyor |
| REG-TOWN-1 | İlçe boş bırakılamaz |
| REG-TOWN-2 | Girmiş olduğunuz ilçe kayıtlarımızda bulunmuyor |
| REG-IBAN-1 | Iban boş bırakılamaz |
| REG-IBAN-2 | Girilen iban formatı geçersiz |
| REG-TYPE-1 | Satış tipi boş olmaz |
| REG-TYPE-2 | Satış tipi hatalı |
| REG-SALES-SERVICE-1 | Servis tipi boş olamaz |
| REG-SALES-SERVICE-2 | Servis tipi hatalı |
| REG-DEVICE-1 | Cihaz birden fazla olamaz |
| REG-DEVICE-CITY-1 | Cihaz kurulum ili boş bırakılamaz |
| REG-DEVICE-CITY-2 | Girmiş olduğunuz cihaz kurulum ili kayıtlarımızda bulunmuyor |
| REG-DEVICE-TOWN-1 | Cihaz kurulum ilçesi boş bırakılamaz |
| REG-DEVICE-TOWN-2 | Girmiş olduğunuz cihaz kurulum ilçesi kayıtlarımızda bulunmuyor |
| REG-DEVICE-CASH-REGISTER-TYPE-1 | Cihaz modeli hatalı |
| REG-DEVICE-CASH-REGISTER-TYPE-2 | Cihaz modeli boş bırakılamaz |
| REG-DEVICE-ADDRESS-1 | Cihaz kurulum adresi boş bırakılamaz |
| REG-DEVICE-EFATURA-INTEGRATOR-1 | E-Fatura entegratör bilgisi boş bırakılamaz |
| REG-DEVICE-EFATURA-INTEGRATOR-2 | E-Fatura entegratörü hatalı Odeal dışında bir değer girildiğinde alınan hatadır |
| REG-POS-INSTALLMENT-TYPE-1 | Pos taksit durumu hatalı |
| REG-TAX-NUMBER-1 | Vergi numarası boş bırakılamaz |
| REG-TAX-NUMBER-2 | Vergi numarası en az 10 en fazla 11 adet rakamdan oluşmalıdır |
| REG-MOBILE-1 | Cep telefonu numarası boş bırakılamaz |
| REG-MOBILE-2 | Cep telefonu numarası 5AABBBCCDD formatında olmalıdır |
| REG-TCKN-1 | TCKN boş bırakılamaz |
| REG-TCKN-2 | Girilen TCKN formatı geçersiz |
| REG-ROUTINGMODEL-1 | RoutingModel bilgisi boş olamaz |
| REG-ROUTINGMODEL-2 | RoutingModel bilgisi hatalı |
| REG-EXTERNAL-REGISTRATION-ID-1 | İş ortağı başvuru ID'si boş olamaz |
| 99999 | Gönderilen json payload içeriği hatalı |
Payload Örnekleri
Minimal Payload — Zorunlu Alanlar
{
"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
{
"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
{
"companyInfo": {
"routingModel": "MODEL9",
"...": "..."
}
}Response (400):
{
"status": false,
"message": "Alan ön kontrolleri başarısız",
"errors": ["REG-ROUTINGMODEL-2: RoutingModel bilgisi hatalı"]
}Hatalı Payload — Geçersiz efaturaIntegrator
{
"devices": [
{
"efaturaIntegrator": "BASKA_FIRMA",
"...": "..."
}
]
}Response (400):
{
"status": false,
"message": "Alan ön kontrolleri başarısız",
"errors": ["REG-DEVICE-EFATURA-INTEGRATOR-2: E-Fatura entegratörü hatalı"]
}Örnek Request (Tam)
{
"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"
}
]
}
