Sipariş oluşturma
POST /SaveOrder
Adisyo'da yeni bir sipariş oluşturur.
Örnek istekler
Teslimat veya paket siparişlerinde adres ve isteğe bağlı olarak konum (enlem/boylam) alanları kullanılır.
curl -X POST 'https://ext.adisyo.com/api/External/v2/SaveOrder' \
--header "x-api-key: ..." \
--header "x-api-secret: ..." \
--header "x-api-consumer: ..." \
--header 'Content-Type: application/json' \
--data '{
"CustomerName": "Ahmet",
"CustomerSurname": "Yılmaz",
"CustomerId": "MUS-03",
"CustomerPhone": "5551234567",
"CustomerPhone2": "5559876543",
"Address": "Atatürk Mahallesi, Çiçek Sokak No:12 Daire:4",
"AddressDescription": "Migros karşısındaki apartman, kırmızı kapılı bina",
"Region": "Ataşehir",
"City": "İstanbul",
"PaymentMethodId": 3,
"PaymentNote": "Teslimatta kredi kartı ile ödeme yapılacak",
"Discount": 0,
"OrderTotal": 127.00,
"DeliveryFee": 15,
"OrderNote": "Lütfen sipariş sıcak getirilsin, yanında ıslak mendil ve peçete de olsun",
"WebOrderId": "SIP-08",
"CustomerLatitude": "40,987654",
"CustomerLongitude": "29,123456",
"OrderDetails": [
{
"ProductUnitId": 2359421,
"Quantity": 2,
"OrderDetailNote": "Büyük boy olsun, baharatsız tercih ediyorum"
},
{
"ProductUnitId": 2359422,
"Quantity": 1
}
]
}'İstek Parametreleri
Yukarıdaki sipariş kaydetme isteklerini aşağıdaki örnek senaryo üzerinden açıklayalım:
- Restoranınızın bir web sitesi var.
Ahmet Yılmazisimli bir müşteri, web siteniz üzerinden sipariş veriyor.- Eğer bu müşteri daha önce sisteminizde kayıtlı değilse, öncelikle kendi veritabanınıza kaydetmeli ve oluşturduğunuz müşteri ID’sini (örnekte
MUS-03) Adisyo API’sine göndermelisiniz.- Oluşan siparişi, kendi sisteminizde
SIP-07olarak kaydettiğinizi varsayalım. Bu siparişi Adisyo'ya aynı referans numarası ile gönderirseniz, işlemin takibi ve sonraki adımlar için kullanılabilir.- Siparişin Adisyo'da belirli bir masaya düşmesini istiyorsanız, önce Masa listesi endpointi ile masaları çekip, seçilen masanın
iddeğerini bu istekteTableIdolarak göndermelisiniz.TableIdgöndermezseniz sipariş herhangi bir masa ile ilişkilendirilmez.
| Parametre Adı | Data Tipi | Açıklama |
|---|---|---|
CustomerName | String | Siparişi veren müşterinin adı |
CustomerSurname | String | Siparişi veren müşterinin soyadı |
CustomerId | String | Siparişi veren müşterinin sizin sisteminizdeki ID'si (MUS-03) |
CustomerPhone | String | Siparişi veren müşterinin birincil telefon numarası |
CustomerPhone2 | String | Siparişi veren müşterinin ikincil telefon numarası |
Address | String | Siparişi veren müşterinin adresi |
AddressDescription | String | Siparişi veren müşterinin adres tarifi |
Region | String | Siparişi veren müşterinin semt/ilçe adı |
City | String | Siparişi veren müşterinin şehri |
PaymentMethodId | Number | Ödeme Tipi |
PaymentNote | String | Ödeme notu |
Discount | Number | Sipariş geneline uygulanacak indirim tutarı (Siparişe indirim uygulama) |
DiscountRate | Number? | Sipariş geneline uygulanacak indirim oranı (0-100) (Siparişe indirim uygulama) |
DiscountId | Number? | Sipariş geneline uygulanacak tanımlı indirimin ID'si (Siparişe indirim uygulama) |
OrderNote | String | Sipariş notu |
WebOrderId | String | Siparişin sizin sisteminizdeki ID'si (SIP-07) |
OrderTotal | Number | Sipariş toplam tutarı |
TableId | Number? | Gönderilirse sipariş ilgili masaya oluşturulur. Değer olarak Masa listesi dönen masa ID bilgisi kullanılmalıdır. |
OrderType | Number? | Sipariş tipi. Gönderilmezse paket siparişi oluşturulur (Sipariş tipi) |
DeliveryFee | Number | Teslimat ücreti (Sipariş toplamını hesaplama) |
ServiceCharge | Number | Servis ücreti veya diğer ekstra hizmet ücretleri (Sipariş toplamını hesaplama) |
CustomerLatitude | String? | Müşteri enlem bilgisi (##,####). Masa siparişlerinde zorunlu değildir. |
CustomerLongitude | String? | Müşteri boylam bilgisi (##,####). Masa siparişlerinde zorunlu değildir. |
OrderDetails | Array | Sipariş detaylarının listesi |
[].OrderDetails.ProductUnitId | Number | Ürün birim ID'si (Siparişte ürünü belirtme) |
[].OrderDetails.ProductCode | String | Ürün kodu (Siparişte ürünü belirtme) |
[].OrderDetails.Quantity | Number | Ürün adedi |
[].OrderDetails.OrderDetailNote | String? | Sipariş detayı notu |
[].OrderDetails.DiscountAmount | Number? | Kaleme uygulanacak indirim tutarı (Siparişe indirim uygulama) |
[].OrderDetails.DiscountRate | Number? | Kaleme uygulanacak indirim oranı (0-100) (Siparişe indirim uygulama) |
[].OrderDetails.DiscountId | Number? | Kaleme uygulanacak tanımlı indirimin ID'si (Siparişe indirim uygulama) |
(TODO) [].OrderDetails.Name | String? | Ürün veya menü adı |
[].OrderDetails.IsMenu | Boolean | Menü mü? (Menü ürünleri) |
[].OrderDetails.MenuId | Number? | Menü ID'si (Menü ürünleri) |
[].OrderDetails.ParentId | String? | Bağlı olduğu menü veya ürünün ID'si (Menü ürünleri) |
Sipariş tipi
Sipariş Adisyo'da üç tipten biri olarak kaydedilir: Paket, Gel-Al ya da Masa. Sipariş tipi, ürünlerin hangi fiyattan hesaplanacağını da belirler.
OrderType | Açıklama | Oluşan sipariş | Kullanılan fiyat |
|---|---|---|---|
| (gönderilmez) | — | Paket | Paket fiyatı |
2 | Paket sipariş | Paket | Paket fiyatı |
3 | Gel-Al sipariş | Gel-Al | Gel-Al fiyatı |
| (diğer değerler) | — | Paket | Paket fiyatı |
OrderTypegöndermezseniz sipariş paket olarak kaydedilir. Alan opsiyoneldir, mevcut entegrasyonunuzu değiştirmeniz gerekmez.TableId(0'dan büyük) gönderildiğinde sipariş her hâlükârda masa siparişidir ve masa fiyatı uygulanır;OrderTypedikkate alınmaz.- Masa siparişi için
TableIdgöndermelisiniz.OrderType: 5tek başına masa siparişi oluşturmaz.
Gel-Al siparişte fiyat
Gel-Al siparişte ürünler, Ürün listesi yanıtındaki productUnits[].prices[] içinde orderType değeri 5 olan satırdan fiyatlanır (1 masa, 3 paket fiyatıdır). OrderTotal ve kalem tutarlarını da bu fiyattan hesaplamalısınız; paket fiyatı üzerinden gönderilen toplam eşleşmez ve istek reddedilir.
⚠️ İstekte gönderdiğiniz
OrderTypeile fiyat listesindekiorderTypefarklı listelerdir. Gel-Al, istekte3, fiyat listesinde5değerine karşılık gelir.
Üründe Gel-Al fiyat satırı yoksa istek reddedilir; paket fiyatına düşülmez.
Sipariş Toplamını Hesaplama
Sipariş toplam tutarına eklenen ekstra ücretleri 2 ayrı değer üzerinden iletebilirsiniz.
Teslimat için ayrıca bir ödeme alınıyorsa bunu DeliveryFee alanı üzerinden gönderebilirsiniz.
Örneğin, ürün kalemleri 40, teslimat ücreti 15 TL olan bir sipariş için, OrderTotal: 55, DeliveryFee: 15 olarak iletilmelidir.
Ayrıca, ekstra servis ücreti veya buna benzer ek ücretler de ServiceCharge alanı üzerinden gönderilmelidir.
Örneğin, paketleme ücreti 10, ek servis ücreti 20 olarak hizmet veren bir restoran için,
ürün kalemleri de 90 TL olan bir siparişte ServiceCharge: 30, OrderTotal: 120 TL olarak iletilmelidir.
Bu siparişte bir de 20 TL teslimat ücreti varsa OrderTotal: 140 ve DeliveryFee: 20 TL olmalıdır.
Siparişe indirim uygulama
İndirim hem sipariş geneline hem de tek tek kalemlere uygulanabilir. Her iki seviyede de üç yoldan biri kullanılır:
| Yöntem | Sipariş geneli | Kalem | Açıklama |
|---|---|---|---|
| Tutar | Discount | DiscountAmount | Sabit indirim tutarı |
| Yüzde | DiscountRate | DiscountRate | 0-100 arası oran |
| Tanımlı indirim | DiscountId | DiscountId | Adisyo'da tanımlı indirimin ID'si. Tek başına gönderilirse tutar/oran tanımdan okunur; yanında tutar ya da oran gönderilirse gönderdiğiniz değer uygulanır |
Tanımlı indirimlerin listesi için İndirim listesi sayfasına bakabilirsiniz.
Sipariş oluşturulduktan sonra indirim uygulamak veya mevcut indirimi değiştirmek için Sipariş indirimi endpointini kullanabilirsiniz.
İndirimli siparişte toplam
OrderTotal, indirimler düşüldükten sonra müşterinin ödeyeceği tutardır. Ürün kalemlerinin toplamı ile şu şekilde tutarlı olmalıdır:
Ürün kalemleri toplamı = OrderTotal + toplam indirim - DeliveryFee - ServiceChargeToplam indirim, kalem indirimleri ile sipariş geneli indirimin toplamıdır.
{
"Discount": 30,
"OrderTotal": 250,
"OrderDetails": [
{
"ProductUnitId": 2359421,
"Quantity": 1,
"DiscountRate": 10
},
{
"ProductUnitId": 2359422,
"Quantity": 2
}
]
}Yukarıdaki örnekte birim fiyatlar Adisyo'da 200 TL ve 50 TL olsun:
- Ürün kalemleri toplamı:
200 + (2 x 50) = 300 - Kalem indirimi:
200'ün %10'u =20 - Sipariş geneli indirim:
30 - Toplam indirim:
20 + 30 = 50 OrderTotal:300 - 50 = 250
Kurallar
DiscountIdyanında tutar ya da oran gönderilirse gönderdiğiniz değer uygulanır; indirim yine o tanımlı indirim olarak kaydedilir. Tek başına gönderilirse tanımdaki değer geçerlidir.- Tutar ve oran aynı anda gönderilemez;
DiscountIdile birlikte de gönderilemez. Her seviyede yalnızca biri seçilmelidir. - Yüzde bazlı sipariş geneli indirim, kalem indirimleri düşüldükten sonraki tutara uygulanır. Yukarıdaki örnekte sipariş geneline
"DiscountRate": 10gönderilseydi indirim300'ün değil280'in %10'u, yani28TL olurdu. - Kaleme uygulanan indirim, kalemin tutarını aşamaz.
- Menü alt kalemlerine indirim uygulanamaz. Menüye indirim uygulanacaksa menünün kendisine, yani üst kaleme gönderilmelidir (Menü ürünleri).
- Sipariş geneli indirim sipariş tutarını aşarsa istek reddedilmez; indirim sipariş tutarına eşitlenir ve sipariş
0olarak kaydedilir. Ancak yukarıdaki formül yine sağlanmalıdır: 200 TL tutarındaki bir siparişe 300 TL değerinde bir kupon uygulanacaksa indirimi sipariş tutarında sınırlayıpDiscount: 200,OrderTotal: 0gönderin.
Siparişte ürünü belirtme
Ürün listesi endpointinden alınan ürün listesini baz alarak, oluşturacağınız siparişlerin ürün detaylarında ProductUnitId veya ProductCode alanlarından yalnızca birini tercih etmeniz gerekir.
Siparişteki ürün listesini oluştururken bu alanlardan birini doldurup diğerini null bırakmalı veya hiç göndermemelisiniz.
Menü ürünleri
Sipariş içindeki bir ürün, farklı bir menü altında bulunuyorsa, kendisine ait bir ParentId değeri olmalıdır.
Aksi takdirde, ParentId gönderilmemeli veya null olarak belirtilmelidir.
Not: Bir ürünün
MenuIdveParentIddeğerleri aynı olmamalıdır.
Örnek: Menü İçeren Ürünler
Hamburgerbir menüdür, bu nedenle kendisine ait birMenuIddeğeri vardır.Kola,Hamburger Menüsüaltında yer aldığı içinParentIddeğeri,Hamburger’in MenuIddeğeri ile aynı olmalıdır.
"OrderDetails": [
{
"Quantity": 1,
"ProductUnitId": 123,
"IsMenu": true,
"MenuId": 1,
"ParentId": null
},
{
"Quantity": 1,
"ProductUnitId": 234,
"IsMenu": false,
"MenuId": null,
"ParentId": "1"
}
]Örnek: Bağımsız Ürünler
Eğer Kola herhangi bir menüye bağlı değilse, ParentId parametresi gönderilmemelidir.
"OrderDetails": [
{
"Quantity": 1,
"ProductUnitId": 123,
"IsMenu": false,
"MenuId": null,
"ParentId": null
},
{
"Quantity": 1,
"ProductUnitId": 234,
"IsMenu": false,
"MenuId": null,
"ParentId": null
}
]Örnek cevap
{
"orderId": 643287,
"orderTotal": 18.00,
"discount": 0.00,
"insertedDate": "2025-09-26T20:21:40.05",
"status": 100,
"message": null
}Cevap parametreleri
| Parametre Adı | Data Tipi | Açıklama |
|---|---|---|
orderId | Number | Siparişin Adisyo sistemindeki ID'si |
orderTotal | Number | Siparişin toplam tutarı |
discount | Number | Siparişte uygulanan toplam indirim tutarı |
insertedDate | Date ISO 8601 | Siparişin sisteme kaydedildiği tarih |
status | Number | Sonuç Kodları |
message | String | İşlem sonucu mesajı |