Z raporu ve kasa Restroid’e nasıl iletilir
Kasiyer sizin yazılımınızda «Z al / günü kapat» dediğinde Restroid bunu kendiliğinden görmez. Sizin sunucunuz o anda bir POST atar. Fiş kapanışı (sale-created) gün sonu değildir; her kapanan fiş ayrı, Z bir kez gider.
POST /hooks/z-report-created atar. Kapsam cash şarttır. Fişler için Satış kapanınca.externalId ile atmayın — Restroid her benzersiz id’yi ayrı rapor sanır. Aynı günün tekrarı aynı externalId ile gider; 202 duplicate: true başarıdır. İsteği kasiyer cihazından değil sunucunuzdan atın. Güvenlik.Müşteri Z’yi bize nasıl iletir
- Gün boyunca her kapanan fiş
sale-createdile gelir (stok / kasa satırı orada yazılır). - Kasiyer sizin POS’unuzda Z alır veya günü kapatır. X (ara rapor) bu API’ye gitmez.
- Sizin backend, o kapanışın özetini Restroid’e bir kez POST eder. Restroid kaydı Finans → Z Raporları listesine yazar.
- Webhook açıksa Restroid size
cash.shift_closeddöner (data.source = z.created). Bu, sizin Z POST’unuzun kopyası değil; Cloud’un günü işlediğinin haberidir.
Canlı adres: POST https://cloud.restroid.com/api/public/partner/v1/hooks/z-report-created
Geliştirme: cloud.restroid.dev. Eşdeğer yollar: /hooks/z-report, /hooks/z.created.
Ne zaman göndermelisiniz
- Gün bitti, kasiyer Z aldı veya «günü kapat» dedi — o anda, bir kez.
- Açık masa, taslak, X raporu veya öğle arası nakit sayımı Z değildir; bunları bu uca atmayın.
- restaurantId GET /restaurants yanıtındaki UUID’dir. Kendi şube kodunuz değildir.
- externalId sizin Z / gün kapanış numaranızdır (ör. Z-20260828-004). Satış fiş numarası buraya konmaz.
- Kapsamda cash işaretli olmalı. sales_inbound Z yazmaz.
İstek gövdesi
Başlıklar
| Başlık | Değer |
|---|---|
| Api-Key | Süper adminin verdiği rkp_… anahtarı |
| Content-Type | application/json |
| Accept | application/json |
Örnek (curl)
curl -sS -X POST https://cloud.restroid.com/api/public/partner/v1/hooks/z-report-created \
-H "Api-Key: rkp_..." \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"restaurantId": "3f2a1c0e-1111-4222-a333-444455556666",
"externalId": "Z-20260828-004",
"occurredAt": "2026-08-28T23:05:00+03:00",
"cashierName": "Ayşe",
"reportNumber": 4,
"totalSales": 1850.5,
"cashAmount": 800,
"discountAmount": 20,
"canceledAmount": 0,
"complimentaryAmount": 0,
"wasteAmount": 0,
"payments": [
{ "method": "cash", "amount": 800, "count": 10 },
{ "method": "card", "amount": 1050.5, "count": 14 }
],
"countedCash": [
{ "name": "Ana kasa", "expected": 800, "counted": 795 }
]
}'| Alan | Zorunlu | Anlamı |
|---|---|---|
| restaurantId | Evet | Restroid restoran UUID. GET /restaurants → id. |
| externalId | Evet | Sizin Z / gün kapanış id’niz. 1–128 karakter. Tekrarında stoğu veya Z’yi ikinci kez yazmaz. |
| totalSales | Evet | Günün ciro toplamı. Sayı, 0–10.000.000. Eşdeğer: total. |
| occurredAt | Hayır | ISO-8601 kapanış anı. Yoksa Restroid kabul saati. |
| cashierName | Hayır | Z’yi alan kasiyer. Panel listesinde görünür. |
| reportNumber | Hayır | Z sıra no (4). Yoksa externalId içindeki son sayı grubu (Z-20260828-004 → 4). |
| cashAmount | Hayır | Nakit toplam. Kasa bakiyesini buradan artırmaz; özet alandır. |
| discountAmount | Hayır | İskonto toplamı. |
| canceledAmount | Hayır | İptal / ürün iptal toplamı. Eşdeğer: productCanceledAmount. |
| complimentaryAmount | Hayır | İkram toplamı. |
| wasteAmount | Hayır | Fire / zayi. Eşdeğer: lossAmount. |
| payments[] | Hayır | En fazla 20. method (cash, card…), amount, count. |
| countedCash[] | Hayır | Nakit sayım. name, expected, counted. Panel farkı counted − expected. |
Tutarlar sayı olmalı (1850.5), "1.850,50" metin değil. Gövde 256 KB üstü 413.
Yanıt
202 — kabul
{
"accepted": true,
"event": "z.created",
"restaurantId": "…",
"externalId": "Z-20260828-004",
"sourceEventId": "partner-z:…:Z-20260828-004"
}202 — aynı externalId tekrar
{
"accepted": true,
"duplicate": true,
"event": "z.created",
"restaurantId": "…",
"externalId": "Z-20260828-004"
}| HTTP | Ne zaman |
|---|---|
| 400 | restaurantId, externalId, totalSales veya ödemeler geçersiz. |
| 403 | cash kapsamı yok, durum active değil veya restoran bağlı değil. |
| 409 | Aynı Z şu anda işleniyor; kısa süre sonra tekrar. Veya restoran Cloud’a bağlı değil. |
| 413 | Gövde 256 KB üstü. |
| 415 | Content-Type application/json değil. |
| 429 | Hız sınırı. Retry-After kadar bekleyin. |
Restroid bunu panele nasıl yazar
- Kayıt Finans → Z Raporları listesine düşer (şube kodu, kasiyer, ciro, iskonto, iptal, ikram, fire).
- İşletme sahibine «Z rapor alındı» bildirimi gidebilir.
- Açık masa silinmez, Restroid POS fişleri kapanmaz. Partner Z, Cloud POS gün kapatmanın yerine geçmez.
- Kasa hesabı bakiyesi Z ile değişmez. Nakit zaten her sale-created satırında yazılmıştır.
X raporu, nakit vardiya, kasa okuma
| İş | API var mı | Ne yaparsınız |
|---|---|---|
| Z / gün kapat | Evet — POST /hooks/z-report-created | Kasiyer Z alınca bir kez POST. |
| Para girişi | Evet — POST /hooks/cash-in | Çekmeceye nakit koyunca. |
| Para çıkışı | Evet — POST /hooks/cash-out | Çekmeceden nakit alınca. |
| Öğle nakit vardiya | Evet — POST /hooks/cash-shift-closed | Teslim / sayım. Z değildir. |
| Gider | Evet — POST /hooks/expense-created | Kapsam accounting. Kategori adı paneldekiyle eşleşirse bağlanır. |
| X (ara rapor) | Hayır | Yalnız sizin yazıcınız / ekranınız. |
| Kasa hesabı açma | Hayır | Hesap Cloud panelinde açılır. |
| Kasa bakiyesi okuma | Evet — GET …/cash | Hareketlerden hesaplanan bakiye. |
| Vardiya geçmişi | Evet — GET …/cash-shifts | Sizin ve Cloud’un kapattığı vardiyalar. |
| Alınmış Z’leri okuma | Evet — GET …/z-reports | Sizin ve Cloud POS’un yazdığı Z özeti. |
| Muhasebe hareketi okuma | Evet — GET …/accounting | POS_SALE, CASH_IN/OUT, EXPENSE. |
Restroid Cloud POS’ta gün kapanırsa yön tersidir: Restroid size cash.shift_closed atar. Siz Z aldıysanız siz Restroid’e yazarsınız; sonra aynı olay source: z.created ile size de dönebilir. Ayrıntı: Webhook.
Para girişi / çıkışı
Çekmeceye nakit koyunca veya çekmeceden nakit alınca. Kapsam cash veya accounting. Aynı externalId tekrarında 202 duplicate.
POST /hooks/cash-in
{
"restaurantId": "…",
"externalId": "IN-20260828-01",
"amount": 200,
"description": "Bozuk para",
"accountName": "Ana kasa",
"occurredAt": "2026-08-28T14:10:00+03:00"
}
POST /hooks/cash-out
{
"restaurantId": "…",
"externalId": "OUT-20260828-01",
"amount": 80,
"description": "Market"
}accountName paneldeki nakit kasa adı ile eşleşmezse ilk nakit hesap kullanılır. Giriş eşdeğerleri: /hooks/cash.in, /hooks/cash-inflow. Çıkış: /hooks/cash.out, /hooks/cash-outflow.
| Alan | Zorunlu | Anlamı |
|---|---|---|
| restaurantId | Evet | Restroid restoran UUID. |
| externalId | Evet | Sizin hareket numaranız. Tekrarında 202 duplicate. |
| amount | Evet | Pozitif sayı, en fazla 10.000.000. |
| description | Hayır | Açıklama. Yoksa Restroid varsayılan metin yazar. |
| accountName | Hayır | Nakit kasa adı. Eşleşmezse ilk nakit hesap. |
| occurredAt | Hayır | ISO-8601. Yoksa kabul saati. |
Nakit vardiya (öğle teslim)
Z değildir. Kasiyer çekmeceyi sayıp teslim edince bir kez. Kapsam cash. Kayıt Finans → Nakit vardiya listesine düşer.
POST /hooks/cash-shift-closed
{
"restaurantId": "…",
"externalId": "V-20260828-2",
"startedAt": "2026-08-28T08:00:00+03:00",
"occurredAt": "2026-08-28T16:00:00+03:00",
"countedAmount": 790,
"expectedAmount": 800,
"dropAmount": 750,
"floatLeft": 40
}varianceAmount yoksa counted − expected yazılır (−10). Eşdeğer: /hooks/shift-closed, /hooks/cash.shift_closed. Webhook açıksa cash.shift_closed (source: partner.shift) döner.
| Alan | Zorunlu | Anlamı |
|---|---|---|
| restaurantId | Evet | Restroid restoran UUID. |
| externalId | Evet | Sizin vardiya id’niz. Sondaki sayı seq olur (V-20260828-2 → 2). |
| countedAmount | Evet | Sayılan nakit. Eşdeğer: counted. |
| occurredAt | Hayır | Kapanış. Eşdeğer: closedAt. Yoksa kabul saati. |
| startedAt | Hayır | Açılış. Yoksa kapanış anı. |
| expectedAmount | Hayır | Beklenen. Yoksa countedAmount. |
| dropAmount | Hayır | Kasadan alınan / drop. |
| floatLeft | Hayır | Kasada bırakılan. |
| varianceAmount | Hayır | Fark. Negatif olabilir. Yoksa counted − expected. |
| cashierName | Hayır | Kasiyer adı (log). Personel kaydına bağlanmaz. |
Gider
Kapsam accounting. categoryName Cloud’daki gider türü adı ile birebir (büyük/küçük harf duyarsız) eşleşirse bağlanır; yoksa yalnız açıklamada kalır. Kategori oluşturmaz.
POST /hooks/expense-created
{
"restaurantId": "…",
"externalId": "G-20260828-04",
"amount": 45.5,
"description": "Su",
"categoryName": "Mutfak"
}| Alan | Zorunlu | Anlamı |
|---|---|---|
| restaurantId | Evet | Restroid restoran UUID. |
| externalId | Evet | Sizin gider numaranız. |
| amount | Evet | Pozitif sayı. |
| description | Evet | Açıklama. Boş olamaz. |
| categoryName | Hayır | Panel gider türü adı (büyük/küçük harf duyarsız). |
| accountName | Hayır | Nakit kasa adı. Yoksa ilk nakit hesap. |
| occurredAt | Hayır | ISO-8601. |
GET /restaurants/{id}/cash
Kapsam cash. Yalnız type = cash hesaplar (banka / kart tanımı dönmez).
GET /restaurants/{restaurantId}/cash?limit=50&offset=0
{
"restaurantId": "…",
"cashAccounts": [
{
"id": "…",
"name": "Ana kasa",
"type": "cash",
"currencyCode": "TRY",
"balance": "1200.00",
"showOnPos": true
}
]
}| Alan | Ne işe yarar |
|---|---|
| id | Kasa hesabı UUID. Partner API ile hesap açılmaz; bilgi. |
| name | Paneldeki kasa adı (Ana kasa). cash-in / countedCash ile eşlemek için. |
| type | Her zaman cash. Bu listede banka yok. |
| currencyCode | Para birimi, genelde TRY. |
| balance | Açılış + hareketler (satış, giriş, çıkış, gider). |
| showOnPos | Cloud POS’ta görünsün mü. Sizin ekranınızı bağlamaz. |
GET /restaurants/{id}/z-reports
Kapsam cash. Son Z’ler, yenisi üstte. ?limit= / ?offset=.
{
"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"
}
]
}Vardiyalar
GET /restaurants/{restaurantId}/cash-shifts
{
"restaurantId": "…",
"shifts": [
{
"id": "…",
"seq": 2,
"startedAt": "…",
"closedAt": "…",
"countedAmount": 790,
"dropAmount": 750,
"floatLeft": 40,
"varianceAmount": -10,
"personnelName": null
}
]
}Sık yapılan hatalar
- Z’yi sale-created ile göndermek. Fiş satırları oraya, gün özeti buraya.
- X raporunu veya öğle sayımını Z sanmak. Öğle teslim cash-shift-closed iledir.
- Gideri cash-out sanmak. Fatura / gider kalemi expense-created ister; description zorunludur.
- Her fiş kapanışında Z atmak. Z günde bir (veya sizin kuralınız kadar) kez.
- restaurantId olarak şube kodu yazmak.
- totalSales’i metin göndermek.
- cash kapsamını istememek — uç 403 döner.
