☰ Meniu · Restaurante și cafenele
Ghiduri

Restaurante și cafenele

Trei lucruri pe care POS-ul unui local le poate face cu Loyaltyfy: sincronizează meniul QR, preia comenzi de la mese și rulează programul de fidelitate la casă.

De obicei POS-ul este sursa de adevăr pentru prețuri și pentru ce s-a terminat. Dă fiecărui preparat SKU-ul tău în external_id, apoi adresează preparatele după acest SKU; nu trebuie să păstrezi id-urile noastre.

  1. 1
    Citește ce există

    GET /v1/menu întoarce categoriile, preparatele și modificatorii în toate limbile. Adaugă ?lang=en ca să primești texte simple, într-o singură limbă.

  2. 2
    Creează ce lipsește

    POST /v1/menu/items cu category (id-ul categoriei sau codul tău de categorie; un cod necunoscut creează categoria), external_id, name în una sau mai multe limbi și price. Dacă trimiți din nou același external_id, primești preparatul existent.

  3. 3
    Trimite modificările

    La fiecare modificare sau la câteva minute, trimite POST /v1/menu/items/bulk cu prețurile și disponibilitatea. Până la 500 de preparate per apel; SKU-urile necunoscute apar în not_found.

curl
curl https://loyaltyfy.io/api/v1/menu/items/bulk \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "item": "1001", "price": 4800 },
      { "item": "2040", "available": false },
      { "item": "3017", "price": 9900, "old_price": 12000 }
    ]
  }'
Răspuns · 200
{
  "object": "menu_bulk_result",
  "updated": ["1001", "2040"],
  "unchanged": [],
  "not_found": ["3017"],
  "failed": []
}

Stop-list: available: false lasă preparatul vizibil, cu eticheta "epuizat", și scoate butonul de comandă; visible: false îl ascunde. Modificatorii au propriul comutator, așa că poți dezactiva laptele de ovăz fără să dezactivezi cafeaua:

curl
curl -X PATCH https://loyaltyfy.io/api/v1/menu/option_values/MOD-OAT \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{ "available": false }'
Fotografiile, descrierile și traducerile sunt de obicei editate de local în editorul de meniu Loyaltyfy. Sincronizează doar ce deține cu adevărat POS-ul (prețuri, disponibilitate, eventual denumiri), ca cele două să nu se suprascrie reciproc.

Comenzi de la masă

Când comenzile sunt activate (Meniu → Comenzi în panou), oaspeții care scanează QR-ul de pe masă își pot trimite coșul către local. Fiecare masă are propriul link, cu numărul mesei:

curl
https://loyaltyfy.io/m/your-venue?table=12

Calculăm prețul fiecărei comenzi la noi, din meniul curent, așa că POS-ul se poate baza pe sume. Comenzile cu un preparat sau un modificator din stop-list sunt refuzate înainte să ajungă la tine.

  1. 1
    Primește comenzile noi

    Abonează-te la webhook-ul order.created sau interoghează GET /v1/orders?status=new o dată la 10 până la 15 secunde.

  2. 2
    Acceptă

    Creează comanda în POS, apoi apelează POST /v1/orders/{id}/accept cu id-ul tău de comandă în external_id. Folosește external_id de pe fiecare linie ca să potrivești SKU-urile tale.

  3. 3
    Trece-o mai departe

    PATCH /v1/orders/{id} cu preparing, ready, served, completed. Sau POST /v1/orders/{id}/reject cu un motiv, dacă bucătăria nu o poate prelua.

curl
curl "https://loyaltyfy.io/api/v1/orders?status=new" \
  -H "Authorization: Bearer sk_test_..."
O comandă din listă
{
  "object": "order",
  "id": "0c69a81c-0fbc-4333-b26c-789566b9bea4",
  "number": 10,
  "status": "new",
  "table": "7",
  "note": "No onions, please",
  "currency": "MDL",
  "subtotal": 14000,
  "item_count": 2,
  "items": [
    {
      "item_id": "a48343bd-9f6e-424a-b003-fe790617f4d6",
      "external_id": "2040",
      "name": "Zeamă",
      "quantity": 2,
      "unit_price": 7000,
      "total": 14000,
      "options": []
    }
  ],
  "external_id": null,
  "reject_reason": null,
  "guest_language": "en",
  "source": "qr_menu",
  "livemode": true,
  "created_at": "2026-10-06T18:14:48.233+00:00",
  "accepted_at": null,
  "completed_at": null,
  "updated_at": "2026-10-06T18:14:48.233+00:00"
}
curl
curl -X POST https://loyaltyfy.io/api/v1/orders/0c69a81c-0fbc-4333-b26c-789566b9bea4/accept \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{ "external_id": "POS-ORDER-55821" }'

Statusurile merg doar înainte: new → accepted → preparing → ready → served → completed; new poate deveni și rejected, iar orice comandă deschisă poate deveni cancelled. Pașii pot fi săriți (direct din accepted în completed este în regulă). O mutare înapoi primește 409 invalid_status_transition. Localurile fără integrare POS gestionează aceleași statusuri pe ecranul Comenzi, așa că e în regulă dacă POS-ul tău doar acceptă și finalizează comenzile.

Fidelitate la casa cafenelei

La fel ca la orice integrare POS: caută oaspetele când cardul este scanat și trimite bonul după plată. În cafenelele cu card de ștampile („a 6-a cafea gratuită”), ștampila se acordă pentru bon. Trimite line_items cu codurile tale de produs, ca localul să vadă ce cumpără oaspeții.

Întrebări despre integrare: api@loyaltyfy.io. Răspundem în cel mult o zi lucrătoare.