Tedarikçi uçları
Bu uçlar tedarikçi hesabıyla oluşturulan anahtarlarla çalışır. Liste uçları limit/offset sayfalaması ve meta bloğu döner.
Ürünler
GET /api/v1/productsproducts:read
Ürün kataloğunuz (ada göre sıralı). Filtreler: ?q= isim araması, ?is_active=true|false, ?limit (varsayılan 50, en çok 200), ?offset.
Yanıt
{
"products": [
{
"id": "uuid",
"name": "Klasik San Sebastian",
"description": "10 dilim",
"unit": "adet", // adet | kg | koli | lt | paket
"price": 1160, // KDV hariç birim fiyat (₺)
"list_price": 1400, // üstü çizili liste fiyatı (null olabilir)
"stock": 25, // null = sınırsız/takipsiz
"safety_stock": 5,
"min_order_qty": 1,
"image_url": null,
"is_active": true, // false = restoranlara görünmez
"sold_count": 48,
"group_id": 3, // komisyon grubu (global)
"supplier_category_id": "uuid",
"created_at": "2026-06-10T08:30:00Z"
}
],
"meta": { "limit": 50, "offset": 0, "total": 132 }
}Örnek
curl "https://restomarkt.com/api/v1/products?is_active=true&limit=100" \
-H "Authorization: Bearer rmk_live_..."POST /api/v1/productsproducts:write
Yeni ürün oluşturur. Zorunlu: name, unit, price. Ürün varsayılan olarak aktif açılır.
İstek gövdesi
{
"name": "Frambuazlı Cheesecake", // zorunlu, 2-200 karakter
"unit": "adet", // zorunlu: adet|kg|koli|lt|paket
"price": 950, // zorunlu, ≥ 0 (KDV hariç)
"description": "12 dilim", // opsiyonel
"stock": 20, // opsiyonel; null = takipsiz
"min_order_qty": 1, // opsiyonel
"list_price": 1100, // opsiyonel
"group_id": 3, // opsiyonel (komisyon grubu — GET /categories)
"supplier_category_id": "uuid" // opsiyonel (kendi mağaza kategoriniz)
}Yanıt
{ "product": { "id": "uuid", "name": "Frambuazlı Cheesecake", ... } } // HTTP 201Örnek
curl -X POST https://restomarkt.com/api/v1/products \
-H "Authorization: Bearer rmk_live_..." \
-H "Content-Type: application/json" \
-d '{"name":"Frambuazlı Cheesecake","unit":"adet","price":950}'GET /api/v1/products/:idproducts:read
Tek ürünün tüm alanları. Ürün size ait değilse 404 döner.
Yanıt
{ "product": { "id": "uuid", "name": "...", "price": 950, "stock": 20, ... } }PATCH /api/v1/products/:idproducts:write
Ürün alanlarını güncelleyin; yalnızca gönderdiğiniz alanlar değişir (en az bir alan zorunlu): name, description, price, list_price, stock, safety_stock, min_order_qty, is_active.
İstek gövdesi
{
"stock": 40, // sayı veya null (sınırsız)
"price": 120, // ≥ 0
"is_active": true
}Yanıt
{ "product": { "id": "uuid", "name": "...", "price": 120, "stock": 40, "is_active": true, ... } }Örnek
curl -X PATCH https://restomarkt.com/api/v1/products/PRODUCT_ID \
-H "Authorization: Bearer rmk_live_..." \
-H "Content-Type: application/json" \
-d '{"stock": 40}'DELETE /api/v1/products/:idproducts:write
Ürünü yayından kaldırır (soft delete: is_active=false). Geçmiş siparişler ürüne referans verdiği için kalıcı silme yapılmaz; PATCH ile is_active=true yaparak geri açabilirsiniz.
Yanıt
{ "product": { "id": "uuid", "is_active": false } }Örnek
curl -X DELETE https://restomarkt.com/api/v1/products/PRODUCT_ID \
-H "Authorization: Bearer rmk_live_..."GET /api/v1/categoriesproducts:read
Global ürün grupları (komisyon oranlarıyla — POST /products'ta group_id için) ve kendi mağaza kategorileriniz (supplier_category_id için).
Yanıt
{
"groups": [ { "id": 3, "name": "Pastane & Tatlı", "commission_rate": 4 } ],
"store_categories": [ { "id": "uuid", "name": "Cheesecake", "sort": 1 } ]
}Siparişler
GET /api/v1/ordersorders:read
Size gelen siparişler (yeniden eskiye). Filtreler: ?status=pending gibi tek durum, ?from=YYYY-MM-DD, ?to=YYYY-MM-DD, ?limit, ?offset.
Yanıt
{
"orders": [
{
"id": "uuid",
"status": "pending", // proposal_pending|pending|confirmed|preparing|uretimde|at_warehouse|shipped|out_for_delivery|delivered|cancelled
"payment_method": "cari", // cari | online
"payment_status": "unpaid", // unpaid | paid | refunded
"subtotal": 1740,
"kdv_total": 174,
"discount_total": 0,
"commission_total": 69.6, // platform komisyonu
"total": 1914,
"created_at": "2026-06-10T08:30:00Z"
}
],
"meta": { "limit": 50, "offset": 0, "total": 8 }
}Örnek
curl "https://restomarkt.com/api/v1/orders?status=pending" \
-H "Authorization: Bearer rmk_live_..."GET /api/v1/orders/:idorders:read
Tek siparişin durumu, ödeme bilgisi ve kalemleri.
Yanıt
{ "order": {
"id": "uuid",
"status": "preparing",
"payment_method": "online",
"payment_status": "paid",
"subtotal": 1740,
"commission_total": 69.6,
"total": 1740,
"delivery_address": "Çarşı Şube — Kocaeli/İzmit",
"note": "Sabah teslim",
"created_at": "2026-06-10T08:30:00Z",
"order_items": [
{ "product_name": "Klasik San Sebastian", "unit": "adet", "qty": 1, "unit_price": 1160, "line_total": 1160 }
]
} }PATCH /api/v1/orders/:idorders:write
Sipariş aksiyonları: 'advance' durumu sıradaki adıma geçirir; 'cancel' yalnızca pending/confirmed siparişlerde çalışır (stok/puan/kupon iadesi otomatik); 'set_tracking' kargo taşıyıcı + takip no girer; 'set_delivery_date' tahmini teslim tarihini ayarlar.
İstek gövdesi
{ "action": "advance" }
// { "action": "cancel" }
// { "action": "set_tracking", "tracking_carrier": "Aras Kargo", "tracking_no": "1234567890" }
// { "action": "set_delivery_date", "estimated_delivery_date": "2026-07-15" }Yanıt
{ "id": "uuid", "status": "confirmed" }Örnek
curl -X PATCH https://restomarkt.com/api/v1/orders/ORDER_ID \
-H "Authorization: Bearer rmk_live_..." \
-H "Content-Type: application/json" \
-d '{"action":"advance"}'Stok kontrolü
GET /api/v1/stock/lowproducts:read
Kritik stok raporu: stok takipli, aktif ve stoğu emniyet stoğuna (safety_stock) eşit/altında olan ürünler. ERP tarafında otomatik tedarik tetiklemek için idealdir.
Yanıt
{
"low_stock": [
{ "id": "uuid", "name": "Klasik San Sebastian", "unit": "adet", "stock": 2, "safety_stock": 5, "min_order_qty": 1, "is_active": true }
],
"meta": { "total": 3, "out_of_stock": 1 }
}Örnek
curl https://restomarkt.com/api/v1/stock/low \
-H "Authorization: Bearer rmk_live_..."POST /api/v1/stock/bulkproducts:write
Toplu stok güncelleme (en çok 500 kalem, tek veritabanı işlemi) — depo/ERP senkronizasyonu için. stock: null ürünü stok takipsiz (sınırsız) yapar. Size ait olmayan product_id'ler sessizce atlanır; updated gerçekte güncellenen sayıdır.
İstek gövdesi
{
"items": [
{ "product_id": "uuid", "stock": 40 },
{ "product_id": "uuid", "stock": null }
]
}Yanıt
{ "updated": 2, "received": 2 }Örnek
curl -X POST https://restomarkt.com/api/v1/stock/bulk \
-H "Authorization: Bearer rmk_live_..." \
-H "Content-Type: application/json" \
-d '{"items":[{"product_id":"PRODUCT_ID","stock":40}]}'Kargo ve teslimat
GET /api/v1/shippingsettings:read
Kargo ücreti, ücretsiz kargo eşiği ve minimum sipariş tutarı ayarlarınız.
Yanıt
{ "shipping": { "shipping_fee": 150, "free_shipping_threshold": 2000, "min_order_amount": 500 } }PATCH /api/v1/shippingsettings:write
Kargo ayarlarını güncelleyin (en az bir alan). free_shipping_threshold: null eşiği kapatır.
İstek gövdesi
{ "shipping_fee": 150, "free_shipping_threshold": 2500, "min_order_amount": 500 }Yanıt
{ "shipping": { "shipping_fee": 150, "free_shipping_threshold": 2500, "min_order_amount": 500 } }GET /api/v1/delivery-plansettings:read
Teslimat planınız: ürün grubu bazlı lead time (kaç gün önceden sipariş) ve ilçe bazlı teslimat günleri (ISO: 1=Pzt..7=Paz).
Yanıt
{
"lead_times": [ { "group_id": 3, "group_name": "Pastane & Tatlı", "lead_time_days": 2 } ],
"areas": [ { "district_id": 512, "district_name": "İzmit", "province_id": 41, "delivery_weekdays": [1, 3, 5] } ]
}PATCH /api/v1/delivery-plansettings:write
Lead time (grup bazlı upsert) ve/veya ilçe teslimat günlerini güncelleyin. delivery_weekdays: null günü kısıtlamayı kaldırır. Yalnız hizmet bölgenizdeki ilçeler güncellenebilir.
İstek gövdesi
{
"lead_times": [ { "group_id": 3, "lead_time_days": 2 } ],
"areas": [ { "district_id": 512, "delivery_weekdays": [1, 3, 5] } ]
}Yanıt
{ "updated": { "lead_times": 1, "areas": 1 } }GET /api/v1/service-areassettings:read
Hizmet verdiğiniz ilçeler (il adı ve teslimat günleriyle).
Yanıt
{ "service_areas": [
{ "district_id": 512, "district_name": "İzmit", "province_id": 41, "province_name": "Kocaeli", "delivery_weekdays": [1, 3, 5], "created_at": "..." }
] }POST /api/v1/service-areassettings:write
Hizmet bölgenize ilçe ekler. district_id bulmak için GET /regions (il listesi) ve GET /regions?province_id= (ilçeler) kullanın.
İstek gövdesi
{ "district_id": 512, "delivery_weekdays": [1, 3, 5] } // weekdays opsiyonelYanıt
{ "service_area": { "district_id": 512, "delivery_weekdays": [1, 3, 5] } } // HTTP 201DELETE /api/v1/service-areas/:districtIdsettings:write
İlçeyi hizmet bölgesinden çıkarır — ürünleriniz o bölgedeki restoranlara görünmez olur.
Yanıt
{ "deleted": true }GET /api/v1/regions(herhangi bir anahtar)
Referans veri: il listesi; ?province_id= verilirse o ilin ilçeleri (district_id değerleri buradan).
Yanıt
{ "provinces": [ { "id": 41, "name": "Kocaeli" } ] }
// ?province_id=41 → { "districts": [ { "id": 512, "name": "İzmit" } ] }Finans
GET /api/v1/settlementssettlements:read
Aylık hakediş kayıtlarınız (muhasebe entegrasyonu için). Filtreler: ?period=YYYY-MM, ?status=draft|issued|paid, ?limit, ?offset. payout_due platformun size ödeyeceği online net; commission_due sizin platforma ödeyeceğiniz cari komisyonudur.
Yanıt
{
"settlements": [
{
"id": "uuid",
"period": "2026-06-01",
"order_count": 42,
"online_subtotal": 84000,
"cari_subtotal": 36000,
"commission_total": 4800,
"payout_due": 80640,
"commission_due": 1440,
"status": "issued", // draft | issued | paid
"issued_at": "2026-07-02T10:00:00Z",
"paid_at": null,
"created_at": "2026-07-01T09:00:00Z"
}
],
"meta": { "limit": 50, "offset": 0, "total": 6 }
}Örnek
curl "https://restomarkt.com/api/v1/settlements?period=2026-06" \
-H "Authorization: Bearer rmk_live_..."Sipariş olaylarını anlık almak için Webhook'lar sayfasına bakın — yeni sipariş geldiğinde sisteminize otomatik POST atılır, polling gerekmez.
