RestomarktRestomarkt

Geliştirici API

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

Webhook'lar

Sipariş olaylarını polling yapmadan anlık alın: kayıtlı HTTPS adresinize her olayda JSON gövdeli bir POST atılır. Hem tedarikçi hem restoran anahtarları webhook kaydedebilir; her taraf yalnızca kendi siparişlerinin olaylarını alır.

Olaylar

OlayNe zaman tetiklenir
order.createdYeni sipariş oluşturulduğunda (web, panel veya API — kanal fark etmez)
order.status_changedSipariş durumu her değiştiğinde (onay, hazırlama, sevkiyat, teslim, iptal…)
webhook.testYalnızca talep üzerine — POST /webhooks/:id/test ile kurulum testi

Teslimat gövdesi

Örnek POST gövdesi

{
  "event": "order.status_changed",
  "created_at": "2026-07-10T09:15:00Z",
  "data": {
    "order_id": "uuid",
    "status": "confirmed",
    "previous_status": "pending",   // order.created'da null
    "payment_method": "cari",
    "payment_status": "unpaid",
    "subtotal": 1740,
    "total": 1914,
    "restaurant_id": "uuid",
    "supplier_id": "uuid",
    "order_created_at": "2026-07-10T08:30:00Z"
  }
}

Gövde özet bilgidir; kalemler gerekiyorsa GET /orders/:id ile detayı çekin.

Teslimat garantisi ve retry

Ucunuz 5 saniye içinde 2xx dönmelidir. İlk deneme olay anında yapılır; başarısız olursa (zaman aşımı, bağlantı hatası veya 2xx dışı yanıt) teslimat artan aralıklarla otomatik tekrarlanır: 2 dk → 10 dk → 30 dk → 2 sa — toplam 5 deneme. Beşinci deneme de başarısızsa olay failed olarak işaretlenir ve bir daha gönderilmez. Aynı olay birden çok kez ulaşabilir (en az bir kez teslimat) — her teslimatın tüm denemelerinde aynı kalan X-Restomarkt-Delivery-Id başlığıyla tekilleştirin (işlediğiniz kimlikleri kaydedin, tekrar gelirse 2xx dönüp atlayın). Uzun kesintiler için GET /orders ile mutabakat yine önerilir.

İmza doğrulama

Her istekte şu başlıklar bulunur: X-Restomarkt-Event, X-Restomarkt-Webhook-Id, X-Restomarkt-Delivery-Id(teslimat kimliği — retry'larda değişmez, tekilleştirme için) ve X-Restomarkt-Signature. İmza, ham istek gövdesinin webhook secret'ınızla HMAC-SHA256 özetidir — istekleri mutlaka doğrulayın:

Node.js doğrulama örneği

import crypto from "node:crypto";

function verifyWebhook(rawBody, signatureHeader, secret) {
  // signatureHeader: "sha256=3f5a..."
  const expected = "sha256=" +
    crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(signatureHeader),
    Buffer.from(expected),
  );
}

Yönetim uçları

GET /api/v1/webhookswebhooks:manage

Kayıtlı webhook'larınız. Güvenlik gereği secret hiçbir listede dönmez.

Yanıt

{ "webhooks": [
  { "id": "uuid", "url": "https://ornek.com/webhook", "events": ["order.created"], "is_active": true, "created_at": "..." }
] }

POST /api/v1/webhookswebhooks:manage

Yeni webhook kaydeder (en fazla 10). url https:// olmalı. events boşsa iki olay da açılır. Yanıttaki secret YALNIZCA bu istekte döner — imza doğrulaması için güvenle saklayın.

İstek gövdesi

{
  "url": "https://ornek.com/restomarkt-webhook",
  "events": ["order.created", "order.status_changed"]   // opsiyonel
}

Yanıt

{ "webhook": {
  "id": "uuid",
  "url": "https://ornek.com/restomarkt-webhook",
  "events": ["order.created", "order.status_changed"],
  "is_active": true,
  "secret": "whsec_..."       // bir daha gösterilmez!
} }   // HTTP 201

Örnek

curl -X POST https://restomarkt.com/api/v1/webhooks \
  -H "Authorization: Bearer rmk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"url":"https://ornek.com/restomarkt-webhook"}'

PATCH /api/v1/webhooks/:idwebhooks:manage

url, events veya is_active güncelleyin (en az bir alan). Geçici olarak kapatmak için is_active=false yeterli.

İstek gövdesi

{ "is_active": false }

Yanıt

{ "webhook": { "id": "uuid", "url": "...", "events": [...], "is_active": false, "created_at": "..." } }

DELETE /api/v1/webhooks/:idwebhooks:manage

Webhook kaydını kalıcı olarak siler.

Yanıt

{ "deleted": true }

POST /api/v1/webhooks/:id/testwebhooks:manage

Kayıtlı adrese imzalı bir webhook.test olayı gönderir — imza doğrulamanızı ve ucunuzun erişilebilirliğini canlı sipariş beklemeden sınayın. Senkron çalışır, retry kuyruğuna girmez.

Yanıt

{ "delivered": true, "status_code": 200 }
// uca ulaşılamazsa:
{ "delivered": false, "status_code": null, "error": "Uca ulaşılamadı..." }

Örnek

curl -X POST https://restomarkt.com/api/v1/webhooks/WEBHOOK_ID/test \
  -H "Authorization: Bearer rmk_live_..."