get/me· Hesap
Anahtar bilgisi
Anahtarın bağlı olduğu restoranı, ortamı (live/sandbox), yetkileri ve webhook ayarını döner. Bağlantı testi için idealdir.
{
"data": {
"restaurant": {
"id": "rst_123",
"name": "Pilavcınız Bodrum"
},
"environment": "sandbox",
"apiVersion": "2026-10-01",
"client": {
"id": "cli_1",
"name": "Logo POS",
"scopes": [
"orders:read",
"orders:write"
],
"webhookUrl": "https://pos.ornek.com/btk",
"webhookEvents": []
}
}
}
Hata kodları: 401
get/orders· Siparişler
Siparişleri listele
Senkronizasyon için updatedAt artan sırada döner. Son aldığınız kaydın zamanını updatedSince ile, sayfalar arasında cursor ile ilerleyin. Webhook kaçırılsa bile bu uçla düzenli (ör. 60 sn) yoklama yaparak eksiksiz senkron kalabilirsiniz. Yetki: orders:read.
| Parametre | Yer | Açıklama |
|---|
status | query | Virgülle ayrılmış durumlar, ör. RESTAURANT_PENDING,PREPARING |
updatedSince | query | ISO 8601 zaman; bu andan sonra değişenler |
limit | query | integer |
cursor | query | Önceki yanıttaki nextCursor |
{
"data": [
{
"id": "cmv3k2q9x0001abcd",
"orderNumber": "BTE-5Y0H1938",
"environment": "live",
"status": "RESTAURANT_PENDING",
"statusLabel": "Restoran Onayı Bekleniyor",
"createdAt": "2026-10-16T12:30:00.000Z",
"updatedAt": "2026-10-16T12:30:00.000Z",
"scheduledFor": null,
"estimatedDeliveryAt": null,
"delay": null,
"customer": {
"name": "Ayşe Yılmaz",
"phone": "05551112233"
},
"address": {
"label": "Ev",
"fullAddress": "Caferağa Mah. Moda Cad. No: 12 Daire: 4, Kadıköy/İstanbul",
"city": "İstanbul",
"district": "Kadıköy",
"neighborhood": "Caferağa",
"street": "Moda Cad.",
"buildingNo": "12",
"floor": "2",
"doorNo": "4",
"directions": "Zil bozuk, arayın",
"latitude": 40.987,
"longitude": 29.026
},
"items": [
{
"id": "cmv3k2qa0002abcd",
"menuItemId": "cmmenu0001",
"name": "Tavuklu Pilav",
"quantity": 2,
"unitPrice": 120,
"totalPrice": 250,
"vatRate": 10,
"note": "Az acılı",
"options": [
{
"label": "Büyük porsiyon",
"extraPrice": 5
}
],
"extras": [],
"removedIngredients": [
"Soğan"
]
},
{
"id": "cmv3k2qa0003abcd",
"menuItemId": "cmmenu0002",
"name": "Ayran",
"quantity": 2,
"unitPrice": 25,
"totalPrice": 50,
"vatRate": 10,
"note": null,
"options": [],
"extras": [],
"removedIngredients": []
}
],
"payment": {
"method": "CASH_ON_DELIVERY",
"methodLabel": "Kapıda nakit",
"paidOnline": false,
"status": "PENDING"
},
"totals": {
"subtotal": 300,
"discount": 30,
"deliveryFee": 20,
"serviceFee": 10,
"total": 300,
"currency": "TRY"
},
"delivery": {
"method": "own",
"leaveAtDoor": false
},
"customerNote": "Kapıya bırakmayın",
"cancellation": null,
"accounting": {
"commission": 24,
"platformFee": 10,
"restaurantNet": 246
},
"fiscal": null,
"history": [
{
"status": "RESTAURANT_PENDING",
"at": "2026-10-16T12:30:00.000Z",
"note": "Restoran onayı bekleniyor"
}
]
}
],
"nextCursor": null
}
Hata kodları: 401, 403, 422, 429
get/orders/{id}· Siparişler
Sipariş detayı
Ürünler, seçenekler, çıkarılan malzemeler, adres, ödeme, KDV oranları ve tutarlar. Yetki: orders:read.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"data": {
"id": "cmv3k2q9x0001abcd",
"orderNumber": "BTE-5Y0H1938",
"environment": "live",
"status": "RESTAURANT_PENDING",
"statusLabel": "Restoran Onayı Bekleniyor",
"createdAt": "2026-10-16T12:30:00.000Z",
"updatedAt": "2026-10-16T12:30:00.000Z",
"scheduledFor": null,
"estimatedDeliveryAt": null,
"delay": null,
"customer": {
"name": "Ayşe Yılmaz",
"phone": "05551112233"
},
"address": {
"label": "Ev",
"fullAddress": "Caferağa Mah. Moda Cad. No: 12 Daire: 4, Kadıköy/İstanbul",
"city": "İstanbul",
"district": "Kadıköy",
"neighborhood": "Caferağa",
"street": "Moda Cad.",
"buildingNo": "12",
"floor": "2",
"doorNo": "4",
"directions": "Zil bozuk, arayın",
"latitude": 40.987,
"longitude": 29.026
},
"items": [
{
"id": "cmv3k2qa0002abcd",
"menuItemId": "cmmenu0001",
"name": "Tavuklu Pilav",
"quantity": 2,
"unitPrice": 120,
"totalPrice": 250,
"vatRate": 10,
"note": "Az acılı",
"options": [
{
"label": "Büyük porsiyon",
"extraPrice": 5
}
],
"extras": [],
"removedIngredients": [
"Soğan"
]
},
{
"id": "cmv3k2qa0003abcd",
"menuItemId": "cmmenu0002",
"name": "Ayran",
"quantity": 2,
"unitPrice": 25,
"totalPrice": 50,
"vatRate": 10,
"note": null,
"options": [],
"extras": [],
"removedIngredients": []
}
],
"payment": {
"method": "CASH_ON_DELIVERY",
"methodLabel": "Kapıda nakit",
"paidOnline": false,
"status": "PENDING"
},
"totals": {
"subtotal": 300,
"discount": 30,
"deliveryFee": 20,
"serviceFee": 10,
"total": 300,
"currency": "TRY"
},
"delivery": {
"method": "own",
"leaveAtDoor": false
},
"customerNote": "Kapıya bırakmayın",
"cancellation": null,
"accounting": {
"commission": 24,
"platformFee": 10,
"restaurantNet": 246
},
"fiscal": null,
"history": [
{
"status": "RESTAURANT_PENDING",
"at": "2026-10-16T12:30:00.000Z",
"note": "Restoran onayı bekleniyor"
}
]
}
}
Hata kodları: 401, 403, 404
post/orders/{id}/accept· Siparişler
Siparişi onayla
RESTAURANT_PENDING → RESTAURANT_ACCEPTED. Canlıda kontör düşer, müşteriye bildirim gider ve tahmini teslimat hesaplanır. Aynı istek tekrar gönderilirse (sipariş zaten onaylıysa) 200 ile mevcut hali döner — güvenle yeniden deneyebilirsiniz. Yetki: orders:write.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"deliveryMethod": "own"
}
Hata kodları: 401, 403, 404, 409
post/orders/{id}/reject· Siparişler
Siparişi reddet
Neden kodu zorunludur: OUT_OF_STOCK (Ürün tükendi), TOO_BUSY (Restoran çok yoğun), CLOSING (Kapanış saatine yakın), OUT_OF_ZONE (Adres teslimat bölgesi dışında), CUSTOMER_UNREACHABLE (Müşteriye ulaşılamadı / şüpheli sipariş), OTHER (Diğer). Reddedilen siparişte kontör düşmez. Yetki: orders:write.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"reasonCode": "OUT_OF_STOCK",
"note": "Tavuk kalmadı"
}
Hata kodları: 401, 403, 404, 409, 422
post/orders/{id}/status· Siparişler
Hazırlık / yola çıktı / teslim edildi
İzinli geçişler: RESTAURANT_ACCEPTED→PREPARING→READY_FOR_PICKUP→ON_THE_WAY→DELIVERED. Paketçiniz kuryesi seçildiyse READY_FOR_PICKUP sonrası kurye adımları platformdan gelir. Geçersiz geçişte 409 invalid_transition ve details.allowed döner. Yetki: orders:write.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"status": "PREPARING"
}
Hata kodları: 401, 403, 404, 409, 422
post/orders/{id}/delay· Siparişler
Gecikme bildir
Müşteriye restoran adına özür mesajı gider ve tahmini teslimat ileri alınır (toplam en fazla 90 dk). Neden kodları: WEATHER (Hava muhalefeti), BUSY (Yoğunluk), TRAFFIC (Trafik), COURIER (Kurye gecikmesi), KITCHEN (Hazırlık uzadı). Yetki: orders:write.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"reasonCode": "WEATHER",
"minutes": 20
}
Hata kodları: 401, 403, 404, 422
get/orders/{id}/fiscal· Mali belge
Yazar kasa / e-Arşiv fiş gövdesi
Fişe basılacak satırlar (KDV dahil), indirim, KDV kırılımı, ÖKC ödeme tipi ve müşteriden tahsil edilecek tutar. Platform hizmet bedeli restoran fişine girmez. Yetki: orders:read.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"data": {
"orderId": "cmv3k2q9x0001abcd",
"orderNumber": "BTE-5Y0H1938",
"currency": "TRY",
"pricesIncludeVat": true,
"lines": [
{
"menuItemId": "cmmenu0001",
"name": "Tavuklu Pilav",
"quantity": 2,
"unitPrice": 125,
"total": 250,
"vatRate": 10
},
{
"menuItemId": "cmmenu0002",
"name": "Ayran",
"quantity": 2,
"unitPrice": 25,
"total": 50,
"vatRate": 10
},
{
"menuItemId": "DELIVERY",
"name": "Teslimat ücreti",
"quantity": 1,
"unitPrice": 20,
"total": 20,
"vatRate": 20
}
],
"discount": {
"amount": 30,
"allocation": "proportional_to_items"
},
"vatSummary": [
{
"rate": 10,
"base": 245.45,
"vat": 24.55,
"gross": 270
},
{
"rate": 20,
"base": 16.67,
"vat": 3.33,
"gross": 20
}
],
"receiptTotal": 290,
"vatTotal": 27.88,
"payment": {
"method": "CASH_ON_DELIVERY",
"okcPaymentType": "NAKIT",
"paidOnline": false,
"collectFromCustomer": 300
},
"platformServiceFee": {
"amount": 10,
"note": "Platform hizmet bedeli restoran fişine yazılmaz; Bir Tıkla Yemek tarafından faturalanır."
},
"customer": {
"name": "Ayşe Yılmaz",
"phone": "05551112233"
},
"alreadyIssued": null
}
}
Hata kodları: 401, 403, 404
post/orders/{id}/fiscal· Mali belge
Kesilen mali belgeyi bildir
ÖKC fişi, e-Arşiv veya e-Fatura kesildikten sonra belge numarasını bildirin; gün sonu raporunda fiscal.missing listesinden düşer. Aynı belge no ile tekrar istek 200 (idempotent), farklı belge 409 döner. totalAmount/vatTotal gönderilmezse fiş gövdesinden hesaplanır. Yetki: fiscal:write.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"type": "OKC_RECEIPT",
"documentNumber": "0042",
"zReportNo": "1187",
"ekuNo": "3",
"issuedAt": "2026-10-16T13:05:00+03:00"
}
Hata kodları: 401, 403, 404, 409, 422
get/accounting/daily· Muhasebe
Günlük satış / KDV raporu
İstanbul saatine göre günün siparişleri: teslim edilen ciro, ödeme yöntemi ve ÖKC ödeme tipi kırılımı, KDV matrah/tutar, platform komisyonu ve restoran neti, mali belgesi eksik siparişler. Z raporu ve muhasebe kaydı mutabakatı için. Yetki: accounting:read.
| Parametre | Yer | Açıklama |
|---|
date | query | YYYY-AA-GG (varsayılan: bugün) |
{
"data": {
"date": "2026-10-16",
"currency": "TRY",
"environment": "live",
"restaurant": {
"id": "rst_123",
"name": "Pilavcınız Bodrum"
},
"orders": {
"total": 42,
"delivered": 38,
"cancelled": 3,
"open": 1
},
"sales": {
"itemsGross": 11470,
"discounts": 640,
"deliveryFees": 380,
"serviceFees": 380,
"collected": 11590,
"receiptTotal": 11210
},
"byPaymentMethod": [
{
"method": "CASH_ON_DELIVERY",
"label": "Kapıda nakit",
"okcPaymentType": "NAKIT",
"count": 15,
"amount": 4310
},
{
"method": "CARD_ON_DELIVERY",
"label": "Kapıda kart",
"okcPaymentType": "KREDI_KARTI",
"count": 18,
"amount": 5640
},
{
"method": "MULTINET",
"label": "Multinet",
"okcPaymentType": "YEMEK_KARTI",
"count": 5,
"amount": 1640
}
],
"vat": [
{
"rate": 10,
"base": 9845.45,
"vat": 984.55,
"gross": 10830
},
{
"rate": 20,
"base": 316.67,
"vat": 63.33,
"gross": 380
}
],
"vatTotal": 1047.88,
"platform": {
"commission": 912,
"platformFee": 380,
"restaurantNet": 9848
},
"fiscal": {
"issued": 37,
"missing": [
{
"id": "cmv3k2q9x0009abcd",
"orderNumber": "BTE-5Y0H2001"
}
]
}
}
}
Hata kodları: 401, 403, 422
post/menu/availability· Menü
Toplu stok senkronizasyonu
POS'ta tükenen / tekrar satışa açılan ürünleri tek istekte bildirin (en fazla 500). Yetki: menu:write.
{
"items": [
{
"id": "cmmenu0001",
"isAvailable": false
},
{
"id": "cmmenu0002",
"isAvailable": true
}
]
}
{
"data": {
"updated": 2,
"unknown": [],
"persisted": true
}
}
Hata kodları: 401, 403, 422
post/webhooks/test· Webhook
Test olayı gönder
Tanımlı webhook adresinize imzalı webhook.test olayı gönderir.
{
"data": {
"queued": true,
"deliveryId": "cmdel0001"
}
}
Hata kodları: 401, 422
get/webhooks/deliveries· Webhook
Webhook teslim günlüğü
Son 100 teslimat: durum, deneme sayısı, son HTTP kodu ve hata.
Hata kodları: 401
post/sandbox/orders· Sandbox
Test siparişi oluştur
Yalnızca btk_test_ anahtarıyla. Restoranın gerçek menüsünden test siparişi oluşturur ve order.created webhook'u gönderir. Gövde boşsa rastgele ürün, müşteri ve ödeme yöntemi seçilir.
{
"items": [
{
"menuItemId": "cmmenu0001",
"quantity": 2
}
],
"paymentMethod": "CASH_ON_DELIVERY",
"deliveryFee": 20
}
Hata kodları: 401, 403, 422
post/sandbox/orders/{id}/simulate· Sandbox
Platform olayı simüle et
Platform tarafında gerçekleşen olayları taklit eder: customer_cancelled (onay bekleyen/onaylı), courier_assigned (hazır), courier_picked_up, delivered. İlgili webhook gönderilir.
| Parametre | Yer | Açıklama |
|---|
id* | path | Sipariş kimliği (id) veya sipariş numarası (orderNumber) |
{
"event": "courier_assigned"
}
Hata kodları: 401, 403, 404, 409