API referansı

Taban: https://cloud.restroid.com/api/public/partner/v1 — her istekte Api-Key. Liste uçları ?limit= kabul eder (1–200, varsayılan 50). Satış nasıl kapanır sorusunun adım adım anlatımı referans değil, satış sayfasındadır.

Fiş gönderme: Satış kapanınca. Z, çekmece, vardiya, gider: Z raporu ve kasa. Menü ve ayar çekme: Ürün listesi ve ayarlar. Anahtar ve imza: Güvenlik.

Yollar

YöntemYolKapsamNe işe yarar
GET/meOrtak adı, durum, kapsamlar, bağlı restoran id’leri.
GET/restaurantsBağlı restoranlar: id, name, code.
GET/restaurants/{id}Tek restoran: id, name, code.
GET/restaurants/{id}/productsproductsMenü + fiyat. id, plu, priceAmount… Alan sözlüğü ürün sayfasında.
GET/restaurants/{id}/categoriesproductsKategori: id, parentId, name, sortOrder.
GET/restaurants/{id}/stockstockDepo bazlı stok bakiyesi.
GET/restaurants/{id}/personnelpersonnelPersonel listesi (PIN, IBAN, telefon, e-posta yok).
GET/restaurants/{id}/cashcashNakit hesapları ve bakiye.
GET/restaurants/{id}/z-reportscashAlınmış Z özeti. Alanlar kasa sayfasında.
GET/restaurants/{id}/cash-shiftscashNakit vardiya geçmişi.
GET/restaurants/{id}/accountingaccountingSon muhasebe hareketleri.
POST/hooks/product-upsertproducts_inboundKendi menünüzü yaz / güncelle. Eşdeğer: /hooks/products
POST/hooks/sale-createdsales_inboundKapanan fişi bildir. Eşdeğer: /hooks/sale.created
POST/hooks/sale-cancelledsales_inboundKabul edilmiş fişi iptal et. Eşdeğer: /hooks/sale.cancelled
POST/hooks/z-report-createdcashGün sonu Z. Eşdeğer: /hooks/z-report, /hooks/z.created
POST/hooks/cash-incash veya accountingPara girişi. Eşdeğer: /hooks/cash.in
POST/hooks/cash-outcash veya accountingPara çıkışı. Eşdeğer: /hooks/cash.out
POST/hooks/cash-shift-closedcashÖğle nakit vardiya. Eşdeğer: /hooks/shift-closed
POST/hooks/expense-createdaccountingGider. Eşdeğer: /hooks/expense

GET /me

{
  "partner": {
    "id": "…",
    "name": "Örnek POS",
    "slug": "ornek-pos",
    "status": "active",
    "scopes": ["sales_inbound", "stock", "accounting"],
    "restaurantIds": ["3f2a1c0e-1111-4222-a333-444455556666"],
    "webhookEnabled": true,
    "webhookEvents": ["stock.changed", "accounting.posted"]
  }
}

GET /restaurants

{
  "restaurants": [
    { "id": "3f2a1c0e-1111-4222-a333-444455556666", "name": "Başak Kafe", "code": "BSK" }
  ]
}

Liste boşsa süper admin henüz işletme bağlamamıştır. Satışta kullanacağınız restaurantId buradaki id’dir.

Okuma örnekleri

Ürünler

Alanların tek tek anlamı: Ürün listesi ve ayarlar.

GET /restaurants/{restaurantId}/products?limit=50&offset=0

{
  "restaurantId": "…",
  "total": 86,
  "limit": 50,
  "offset": 0,
  "products": [
    {
      "id": "…",
      "branchId": "…",
      "plu": "101",
      "name": "Adana",
      "categoryId": "cat-izgara",
      "categoryName": "Izgara",
      "status": "Aktif",
      "isHidden": false,
      "productType": "item",
      "sortOrder": 1,
      "price": "185,50",
      "priceAmount": 185.5,
      "barcode": "8690123456789",
      "updatedAt": "2026-08-28T08:00:00.000Z"
    }
  ]
}
AlanNe işe yarar
idRestroid ürün UUID. Satışta items[].productId. Sizin iç kodunuz değil; eşleme anahtarı.
pluRestroid ürün kodu. Satışta items[].plu. Stok satırının kodu.
nameÜrün adı. Satışta items[].name.
priceGösterim metni ("185,50"). Hesap için değil.
priceAmountFiyatın sayısı (185.5). Kendi listenize bunu yazın.
barcodeBarkod / sku. Boş olabilir. Sizin kodunuzla eşlemek için.
categoryId / categoryNameKategori. Ağaç için id; etiket için ad. GET /categories.
statusAktif / Pasif / Gizli. Satılabilir: Aktif.
isHiddentrue ise menüde gizli. Satış ekranından eleyin.
productTypeitem = tek ürün, menu = paket.
sortOrderPanel sırası.
branchIdŞube UUID. Satış gövdesine konmaz.
updatedAtSon değişim. Cache / product.updated sonrası.
total, limit, offsetSayfalama. total > limit ise offset artırın.

Kategoriler

GET /restaurants/{restaurantId}/categories

{
  "restaurantId": "…",
  "categories": [
    { "id": "cat-izgara", "parentId": null, "name": "Izgara", "sortOrder": 1 }
  ]
}

id = ürünlerdeki categoryId. parentId null ise kök kategori.

Stok

{
  "restaurantId": "…",
  "stock": [
    { "warehouseId": "…", "itemCode": "101", "itemName": "Adana", "quantity": "42" }
  ]
}

Personel

{
  "restaurantId": "…",
  "personnel": [
    {
      "id": "…",
      "branchId": "…",
      "fullName": "Ayşe Yılmaz",
      "roleName": "Kasiyer",
      "isActive": true,
      "posTerminalAccess": true,
      "hireDate": "2024-03-01"
    }
  ]
}

PIN, IBAN, telefon ve e-posta dönmez. Personel oluşturma / PIN yazma yok.

Muhasebe

{
  "restaurantId": "…",
  "transactions": [
    {
      "id": "…",
      "branchId": "…",
      "type": "POS_SALE",
      "amount": "185.50",
      "occurredAt": "2026-08-28T11:05:00.000Z",
      "description": "FIS-20260828-00412"
    }
  ]
}

Kasa

Alanlar ve gün sonu Z: Z raporu ve kasa.

{
  "restaurantId": "…",
  "cashAccounts": [
    { "id": "…", "name": "Ana kasa", "type": "cash", "currencyCode": "TRY", "balance": "1200.00", "showOnPos": true }
  ]
}

Z raporları

GET /restaurants/{restaurantId}/z-reports

{
  "restaurantId": "…",
  "reports": [
    {
      "id": "…",
      "reportNumber": 4,
      "occurredAt": "2026-08-28T20:05:00.000Z",
      "cashierName": "Ayşe",
      "totalSales": 1850.5,
      "discountAmount": 20,
      "canceledAmount": 0,
      "complimentaryAmount": 0,
      "wasteAmount": 0,
      "branchCode": "BSK"
    }
  ]
}

POST /hooks/product-upsert

Kendi menünüz master ise. Alanlar: Ürün listesi ve ayarlar.

POST /hooks/product-upsert
{
  "restaurantId": "…",
  "items": [
    { "name": "Adana", "plu": "101", "sku": "ADANA-101", "categoryName": "Izgara", "price": 185.5 }
  ]
}

POST /hooks/sale-created

Fiş kapandıktan sonra bir kez, sizin sunucunuzdan. Alanların tek tek açıklaması satış sayfasında.

POST /hooks/sale-created
Content-Type: application/json
Api-Key: rkp_...

{
  "restaurantId": "restoran-uuid",
  "externalId": "sizin-fis-no",
  "occurredAt": "2026-08-28T12:30:00+03:00",
  "currency": "TRY",
  "total": 185.5,
  "items": [
    { "productId": "…", "plu": "101", "name": "Adana", "qty": 1, "amount": 185.5 }
  ],
  "payments": [
    { "method": "cash", "amount": 185.5 }
  ]
}

202 — kabul

{
  "accepted": true,
  "event": "sale.created",
  "restaurantId": "…",
  "externalId": "sizin-fis-no",
  "posted": { "stock": 1, "accounting": true, "inbox": true }
}

202 — aynı externalId tekrar

{
  "accepted": true,
  "duplicate": true,
  "event": "sale.created",
  "restaurantId": "…",
  "externalId": "sizin-fis-no"
}

POST /hooks/sale-cancelled

POST /hooks/sale-cancelled
{ "restaurantId": "…", "externalId": "sizin-fis-no" }

Önce sale-created kabul edilmiş olmalı. Yoksa 404.

POST /hooks/z-report-created

Kasiyer Z alınca bir kez. Çekmece, öğle vardiya ve gider ayrı uçlardır: Z raporu ve kasa.

POST /hooks/z-report-created
{
  "restaurantId": "…",
  "externalId": "Z-20260828-004",
  "occurredAt": "2026-08-28T23:05:00+03:00",
  "cashierName": "Ayşe",
  "reportNumber": 4,
  "totalSales": 1850.5,
  "cashAmount": 800,
  "payments": [{ "method": "cash", "amount": 800, "count": 10 }]
}

202 — kabul

{
  "accepted": true,
  "event": "z.created",
  "restaurantId": "…",
  "externalId": "Z-20260828-004",
  "sourceEventId": "partner-z:…:Z-20260828-004"
}

POST /hooks/cash-in ve cash-out

POST /hooks/cash-in
{
  "restaurantId": "…",
  "externalId": "IN-20260828-01",
  "amount": 200,
  "description": "Bozuk para"
}

Çıkış: POST /hooks/cash-out, aynı gövde. Kapsam cash veya accounting.

POST /hooks/cash-shift-closed

POST /hooks/cash-shift-closed
{
  "restaurantId": "…",
  "externalId": "V-20260828-2",
  "countedAmount": 790,
  "expectedAmount": 800
}

Kapsam cash. Z değildir.

POST /hooks/expense-created

POST /hooks/expense-created
{
  "restaurantId": "…",
  "externalId": "G-20260828-04",
  "amount": 45.5,
  "description": "Su",
  "categoryName": "Mutfak"
}

Kapsam accounting. description zorunlu.

Hata kodları

HTTPNe zaman
400Gövde eksik veya geçersiz: restaurantId, items, externalId, total / totalSales.
401Api-Key yok, geçersiz veya döndürülmüş (aynı metin).
403Durum active değil, kapsam yok veya restoran bağlı değil.
404Bilinmeyen yol veya iptal edilecek satış bulunamadı.
409Aynı externalId şu anda işleniyor; kısa süre sonra tekrar.
413Gövde 256 KB üstü.
415Content-Type application/json değil.
429Hız sınırı. Retry-After kadar bekleyin.

Restoranınızı dijitalleştirin, büyümeye odaklanın

14 gün ücretsiz deneyin. Kredi kartı bilgisi gerektirmez. İstediğiniz zaman iptal edin.

0 (212) 951 02 21info@restroid.com

100+

Aktif Restoran

20M+

İşlenen Sipariş

8+

Platform Entegrasyonu

11+

Yıllık Deneyim