RestomarktRestomarkt

Geliştirici API

Ürün, stok ve siparişlerinizi kendi sisteminizden yönetin — ücretsiz REST API ve MCP desteğiyle.

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 opsiyonel

Yanıt

{ "service_area": { "district_id": 512, "delivery_weekdays": [1, 3, 5] } }   // HTTP 201

DELETE /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.