Explorează contractul exact al acestui gateway. Tipurile, restricțiile și exemplele de mai jos provin din schema sa OpenAPI.
/healthVerifică dacă procesul rulează
Autentificare: Fără autentificare
Întoarce 200 cât timp procesul gateway rulează. Nu necesită cheie. Nu verifică meniurile sau sistemele restaurantului.
Răspunsuri
Procesul gateway rulează.
objectCerere
curl "https://website.api.pionier.ro/health"Răspuns
Fără conținut/v1/connectionsDescoperă punctele de vânzare activate
Autentificare: WebsiteKey
Listează locațiile și casele de marcat care pot primi comenzi cu cheia website. Folosește ID-ul unei conexiuni în fiecare cerere pentru meniu, comandă și stare, chiar dacă există o singură conexiune. O listă goală înseamnă că restaurantul nu a activat încă comenzile website.
Răspunsuri
Conexiunile activate pentru cheia website.
ConnectionListCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Rezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl "https://website.api.pionier.ro/v1/connections" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Răspuns
Fără conținut{
"detail": "invalid_credentials"
}{
"error": "storage_unavailable"
}{
"error": "rate_limit_exceeded"
}/v1/connections/{connection_id}/menuCitește meniul restaurantului
Autentificare: WebsiteKey
Întoarce meniul publicat pentru această conexiune. Sumele sunt în bani întregi. Trimite revizia și ID-urile din acest meniu în comandă. Disponibilitatea și accepting_orders se pot schimba fără o revizie nouă, deci preia meniul din nou chiar înainte de finalizarea comenzii.
Parametri
connection_idstringpathobligatoriufulfillment_atstring | nullqueryopționalRăspunsuri
Meniul publicat pentru această conexiune.
MenuDate de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Conexiunea nu este disponibilă pentru acest tenant sau meniul/comanda solicitată nu există.
DetailErrorConflict, de exemplu o revizie de meniu învechită sau un articol epuizat. Codul erorii indică ce trebuie schimbat.
ErrorRezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/menu" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Răspuns
{
"revision": "example-menu-1",
"currency": "RON",
"accepting_orders": true,
"fulfillment": [
"pickup",
"delivery"
],
"delivery_fee": 700,
"categories": [
{
"id": "pizzas",
"name": "Pizza"
},
{
"id": "meals",
"name": "Meals"
}
],
"products": [
{
"id": "pizza-margherita",
"category_id": "pizzas",
"name": "Margherita",
"description": "Tomato, mozzarella and basil",
"image_url": "https://images.example.test/margherita.jpg",
"translations": {
"en": {
"name": "Margherita",
"description": "Tomato, mozzarella and basil"
},
"ro": {
"name": "Margherita",
"description": "Roșii, mozzarella și busuioc"
}
},
"price": 3200,
"packaging": 100,
"packaging_product_id": "pizza-box",
"modifier_groups": [
{
"id": "pizza-extras",
"name": "Extras",
"kind": "extra",
"minimum": 0,
"maximum": 1,
"options": [
{
"id": "cheese",
"name": "Extra cheese",
"price": 400
}
]
}
]
},
{
"id": "burger-meal",
"category_id": "meals",
"name": "Burger meal",
"description": "Burger, fries and your choice of drink",
"translations": {
"en": {
"name": "Burger meal",
"description": "Burger, fries and your choice of drink"
},
"ro": {
"name": "Meniu burger",
"description": "Burger, cartofi prăjiți și băutură la alegere"
}
},
"price": 2500,
"packaging": 100,
"packaging_product_id": "meal-bag",
"modifier_groups": [
{
"id": "size",
"name": "Size",
"kind": "variant",
"minimum": 1,
"maximum": 1,
"options": [
{
"id": "regular",
"name": "Regular",
"price": 0
},
{
"id": "large",
"name": "Large",
"price": 0
}
]
},
{
"id": "drink",
"name": "Drink",
"kind": "bundle",
"minimum": 1,
"maximum": 1,
"options": [
{
"id": "water",
"name": "Water",
"price": 0,
"deposit": 50
}
]
},
{
"id": "meal-extras",
"name": "Extras",
"kind": "extra",
"minimum": 0,
"maximum": 1,
"options": [
{
"id": "sauce",
"name": "Extra sauce",
"price": 200
}
]
}
],
"variants": [
{
"id": "meal-regular",
"selections": [
{
"group_id": "size",
"option_id": "regular"
}
],
"price": 2500
},
{
"id": "meal-large",
"selections": [
{
"group_id": "size",
"option_id": "large"
}
],
"price": 3000
}
]
}
]
}{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "menu_not_published"
}{
"error": "scheduled_time_unavailable"
}{
"error": "storage_unavailable"
}{
"error": "rate_limit_exceeded"
}/v1/menuPublică un meniu complet
Autentificare: PublisherKey
Folosit de Nexus Retail cu o cheie de publicare; integrările website nu îl apelează niciodată. Reviziile sunt imuabile. Include generația pozitivă obligatorie X-Website-Publication. O reîncercare identică cu aceeași generație este idempotentă dacă nu a sosit o generație mai nouă; generațiile învechite sau conținutul modificat sub aceeași generație întorc 409 publication_superseded.
Parametri
x-website-publicationintegerheaderobligatoriuCorpul cererii application/json
Schemă: Menu
revisionstringobligatoriuVersiunea meniului publicat. Trimite-o ca menu_revision. Disponibilitatea și accepting_orders se pot schimba fără o revizie nouă.
lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$"currencystringopționalÎntotdeauna RON. Sumele sunt în bani întregi.
implicit: "RON" · valoare: "RON"accepting_ordersbooleanopționalFalse când restaurantul este în pauză sau închis. Continuă să afișezi meniul, dar dezactivează finalizarea comenzii.
implicit: trueProgramul curent și excepțiile restaurantului în fusul său orar. Null dacă nu există politică configurată.
Comenzile programate sunt acceptate întotdeauna; durata implicită de preparare stabilește momentul începerii în bucătărie.
fulfillmentarray<string>obligatoriuInclude întotdeauna ridicare și livrare.
minimum de elemente: 1 · maximum de elemente: 2delivery_feeintegeropționalTaxă fixă în bani, aplicată o singură dată per comandă cu livrare, niciodată pentru ridicare.
min: 0.0 · max: 100000000.0 · implicit: 0tips_enabledbooleanopționalIndică dacă pot fi incluse bacșișuri pentru personalul restaurantului. Necesită configurarea bacșișului în POS; bacșișurile curierului nu sunt incluse.
implicit: falseSecțiunile meniului.
minimum de elemente: 1 · maximum de elemente: 200Tot ce poate fi comandat. Fiecare produs face referire la o categorie.
minimum de elemente: 1 · maximum de elemente: 5000Răspunsuri
Meniul a fost publicat sau exista deja o copie identică publicată.
Date de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Conflict, de exemplu o revizie de meniu învechită sau un articol epuizat. Codul erorii indică ce trebuie schimbat.
ErrorCorpul cererii depășește 4 MiB.
ErrorRezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X PUT "https://website.api.pionier.ro/v1/menu" \
-H "Authorization: Bearer $NEXUS_PUBLISHER_KEY" \
-H "X-Website-Publication: 1" \
-H "Content-Type: application/json" \
--data-binary @request.json{
"revision": "example-menu-1",
"currency": "RON",
"accepting_orders": true,
"fulfillment": [
"pickup",
"delivery"
],
"delivery_fee": 700,
"categories": [
{
"id": "pizzas",
"name": "Pizza"
},
{
"id": "meals",
"name": "Meals"
}
],
"products": [
{
"id": "pizza-margherita",
"category_id": "pizzas",
"name": "Margherita",
"description": "Tomato, mozzarella and basil",
"image_url": "https://images.example.test/margherita.jpg",
"translations": {
"en": {
"name": "Margherita",
"description": "Tomato, mozzarella and basil"
},
"ro": {
"name": "Margherita",
"description": "Roșii, mozzarella și busuioc"
}
},
"price": 3200,
"packaging": 100,
"packaging_product_id": "pizza-box",
"modifier_groups": [
{
"id": "pizza-extras",
"name": "Extras",
"kind": "extra",
"minimum": 0,
"maximum": 1,
"options": [
{
"id": "cheese",
"name": "Extra cheese",
"price": 400
}
]
}
]
},
{
"id": "burger-meal",
"category_id": "meals",
"name": "Burger meal",
"description": "Burger, fries and your choice of drink",
"translations": {
"en": {
"name": "Burger meal",
"description": "Burger, fries and your choice of drink"
},
"ro": {
"name": "Meniu burger",
"description": "Burger, cartofi prăjiți și băutură la alegere"
}
},
"price": 2500,
"packaging": 100,
"packaging_product_id": "meal-bag",
"modifier_groups": [
{
"id": "size",
"name": "Size",
"kind": "variant",
"minimum": 1,
"maximum": 1,
"options": [
{
"id": "regular",
"name": "Regular",
"price": 0
},
{
"id": "large",
"name": "Large",
"price": 0
}
]
},
{
"id": "drink",
"name": "Drink",
"kind": "bundle",
"minimum": 1,
"maximum": 1,
"options": [
{
"id": "water",
"name": "Water",
"price": 0,
"deposit": 50
}
]
},
{
"id": "meal-extras",
"name": "Extras",
"kind": "extra",
"minimum": 0,
"maximum": 1,
"options": [
{
"id": "sauce",
"name": "Extra sauce",
"price": 200
}
]
}
],
"variants": [
{
"id": "meal-regular",
"selections": [
{
"group_id": "size",
"option_id": "regular"
}
],
"price": 2500
},
{
"id": "meal-large",
"selections": [
{
"group_id": "size",
"option_id": "large"
}
],
"price": 3000
}
]
}
]
}Răspuns
Fără conținut{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"error": "revision_already_used"
}{
"error": "body_too_large"
}{
"error": "storage_unavailable"
}{
"error": "rate_limit_exceeded"
}/v1/connections/{connection_id}/ordersTrimite o comandă
Autentificare: WebsiteKey
Trimite o comandă restaurantului. 201 înseamnă că restaurantul a primit-o; personalul trebuie încă să o accepte. Retrimiterea cererii identice întoarce 200 cu confirmarea inițială și nu creează niciodată o a doua comandă. După expirarea timpului de răspuns sau 503, retrimite același external_order_id și același corp. Primește progresul prin webhook-uri; folosește GET pentru reconcilierea actualizărilor lipsă sau când webhook-urile nu sunt disponibile.
Parametri
connection_idstringpathobligatoriuCorpul cererii application/json
Schemă: OrderRequest
external_order_idstringobligatoriuID-ul tău pentru această achiziție. Salvează-l înainte de trimitere și refolosește-l neschimbat la fiecare reîncercare; gateway-ul nu creează niciodată două comenzi pentru același ID.
lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$"menu_revisionstringobligatoriuRevizia meniului folosită la calcularea prețului acestui coș.
lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$"currencystringopționalÎntotdeauna RON.
implicit: "RON" · valoare: "RON"fulfillmentstringobligatoriupickup sau delivery. Ambele modalități sunt acceptate.
valori: ["delivery", "pickup"]scheduled_forstring | nullopționalOra cerută pentru onorare, cu offset explicit. Null înseamnă onorare imediată.
Persoana care a plasat comanda.
Obligatorie pentru livrare; omite sau trimite null pentru ridicare.
Cum este plătită comanda. Nexus nu încasează de la client.
Coșul: între 1 și 100 de linii.
minimum de elemente: 1 · maximum de elemente: 100totalintegerobligatoriuTotalul calculat de tine în bani, după reducerile publicate și incluzând garanțiile, ambalajele, taxa de livrare și bacșișul. Gateway-ul recalculează și respinge diferențele.
min: 0.0 · max: 100000000.0tipintegeropționalBacșiș opțional pentru personalul restaurantului în bani, implicit zero. Include-l o singură dată în total. Necesită menu.tips_enabled.
min: 0.0 · max: 100000000.0 · implicit: 0Cupon opțional la finalizarea comenzii. Unul per comandă; alocarea este păstrată împreună cu cererea inițială.
notesstringopționalInstrucțiuni pentru întreaga comandă. Folosește items[].notes pentru un singur produs.
lungime maximă: 1000 · implicit: ""Răspunsuri
Restaurantul a primit comanda; aceasta așteaptă acceptarea de către personal.
OrderReceiptComanda identică a fost deja primită; întoarce confirmarea inițială.
OrderReceiptConflict, de exemplu o revizie de meniu învechită sau un articol epuizat. Codul erorii indică ce trebuie schimbat.
ErrorRezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Date de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Corpul cererii depășește 4 MiB.
ErrorConexiunea nu este disponibilă pentru acest tenant sau meniul/comanda solicitată nu există.
DetailErrorLimita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X POST "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/orders" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.json{
"external_order_id": "shop-1001",
"menu_revision": "example-menu-1",
"currency": "RON",
"fulfillment": "pickup",
"customer": {
"name": "Example Customer",
"phone": "0700000000"
},
"payment": {
"method": "paid_online",
"reference": "payment-example-1001"
},
"items": [
{
"product_id": "pizza-margherita",
"quantity": 1,
"modifiers": [
{
"group_id": "pizza-extras",
"option_id": "cheese"
}
],
"notes": "Please slice the pizza"
}
],
"total": 3700,
"notes": "Pickup by Alex"
}{
"external_order_id": "shop-1002",
"menu_revision": "example-menu-1",
"currency": "RON",
"fulfillment": "delivery",
"customer": {
"name": "Example Customer",
"phone": "0700000000"
},
"address": {
"city": "Iași",
"street": "Example Street 10",
"details": "Apartment 2, ring the bell"
},
"payment": {
"method": "cash_on_fulfillment"
},
"items": [
{
"product_id": "burger-meal",
"quantity": 2,
"modifiers": [
{
"group_id": "size",
"option_id": "large"
},
{
"group_id": "drink",
"option_id": "water"
},
{
"group_id": "meal-extras",
"option_id": "sauce"
}
]
}
],
"total": 7400
}Răspuns
{
"external_order_id": "shop-1001",
"status": "pending_acceptance",
"total": 3700,
"currency": "RON"
}{
"external_order_id": "shop-1001",
"status": "pending_acceptance",
"total": 3700,
"currency": "RON"
}{
"error": "menu_changed"
}{
"error": "retail_unavailable",
"retry_same_order_id": true
}{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"error": "body_too_large"
}{
"detail": "connection_not_found"
}{
"error": "rate_limit_exceeded"
}/v1/connections/{connection_id}/orders/{external_order_id}Citește starea curentă a comenzii
Autentificare: WebsiteKey
Întoarce starea curentă a comenzii din restaurant. Folosește-o pentru reconcilierea notificărilor webhook sau pentru citiri periodice când webhook-urile nu sunt configurate. Un 503 înseamnă că starea nu a putut fi citită, nu că a fost respinsă comanda. Oprește citirile la completed, rejected sau cancelled.
Parametri
connection_idstringpathobligatoriuexternal_order_idstringpathobligatoriuRăspunsuri
Starea curentă a comenzii.
OrderReceiptDate de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Conexiunea nu este disponibilă pentru acest tenant sau meniul/comanda solicitată nu există.
DetailErrorRezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/orders/shop-1001" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Răspuns
{
"external_order_id": "shop-1001",
"status": "accepted",
"total": 3700,
"currency": "RON"
}{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "order_not_found"
}{
"error": "retail_unavailable",
"retry_same_order_id": true
}{
"error": "rate_limit_exceeded"
}/v1/connections/{connection_id}/orders/{external_order_id}/refundsRaportează rezultatul unei rambursări externe
Autentificare: WebsiteKey
Înregistrează rezultatul final succeeded sau failed al unei rambursări efectuate de procesatorul tău. Nu inițiază și nu verifică o rambursare și nu inversează un bon Retail. Doar comenzile paid_online sunt eligibile. Salvează request_id și reîncearcă același corp după un răspuns incert. Fiecare processor_reference este unică per comandă; maximum 100 de rapoarte. Sumele reușite nu pot depăși totalul inițial al comenzii.
Parametri
connection_idstringpathobligatoriuexternal_order_idstringpathobligatoriuCorpul cererii application/json
Schemă: RefundReport
request_idstringobligatoriuIdentitate stabilă pentru acest raport final de rambursare; reîncearcă fără modificări.
lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$"processor_referencestringobligatoriuReferință unică a procesatorului per comandă; păstrată privat pentru reconciliere.
lungime minimă: 1 · lungime maximă: 200outcomestringobligatoriuRezultat final raportat de website: succeeded sau failed. Nu este verificat cu un procesator.
valori: ["succeeded", "failed"]amountintegerobligatoriuSuma pozitivă a rambursării în bani, fără rambursările deja raportate.
min: 1.0 · max: 100000000.0Răspunsuri
Successful Response
OrderReceiptDate de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Conexiunea nu este disponibilă pentru acest tenant sau meniul/comanda solicitată nu există.
DetailErrorConflict, de exemplu o revizie de meniu învechită sau un articol epuizat. Codul erorii indică ce trebuie schimbat.
ErrorRezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X POST "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/orders/shop-1001/refunds" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.jsonRăspuns
Fără conținut{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "order_not_found"
}{
"error": "refund_report_not_allowed"
}{
"error": "retail_unavailable",
"retry_same_order_id": true
}{
"error": "rate_limit_exceeded"
}/v1/connections/{connection_id}/orders/{external_order_id}/deliveryRaportează progresul livrării
Autentificare: WebsiteKey
Trimite un request_id stabil pentru fiecare actualizare și reîncearcă același corp după un rezultat incert. Doar comenzi cu livrare: alocarea necesită acceptarea, ridicarea necesită starea ready, iar delivered necesită picked_up. Maximum 100 de actualizări distincte per comandă. Datele de contact și estimările omise păstrează valorile anterioare. Nu înregistrează încasarea plății.
Parametri
connection_idstringpathobligatoriuexternal_order_idstringpathobligatoriuCorpul cererii application/json
Schemă: DeliveryUpdate
request_idstringobligatoriuIdentitate stabilă pentru această actualizare a livrării; reîncearcă fără modificări.
lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$"statusstringobligatoriuassigned, arrived, picked_up sau delivered; tranzițiile nu pot reveni la o stare anterioară.
valori: ["assigned", "arrived", "picked_up", "delivered"]courier_namestring | nullopționalNumele curierului pentru personalul restaurantului; exclus din starea publică și webhook-uri.
courier_phonestring | nullopționalTelefonul curierului pentru personalul restaurantului; exclus din starea publică și webhook-uri.
estimated_pickup_atstring | nullopționalOra estimată a ridicării cu offset; null păstrează estimarea anterioară.
estimated_delivery_atstring | nullopționalOra estimată a livrării cu offset; null păstrează estimarea anterioară.
Răspunsuri
Successful Response
OrderReceiptDate de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Conexiunea nu este disponibilă pentru acest tenant sau meniul/comanda solicitată nu există.
DetailErrorConflict, de exemplu o revizie de meniu învechită sau un articol epuizat. Codul erorii indică ce trebuie schimbat.
ErrorRezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X POST "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/orders/shop-1001/delivery" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.jsonRăspuns
Fără conținut{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "order_not_found"
}{
"error": "delivery_update_not_allowed"
}{
"error": "retail_unavailable",
"retry_same_order_id": true
}{
"error": "rate_limit_exceeded"
}/v1/connections/{connection_id}/orders/{external_order_id}/cancelAnulează o comandă eligibilă
Autentificare: WebsiteKey
Comenzile imediate pot fi anulate înainte de acceptare. Comenzile programate acceptate pot fi anulate strict înainte de momentul salvat pentru începerea preparării, dacă prepararea nu a început. Ulterior este necesară aprobarea personalului restaurantului în Retail; comenzile finalizate nu pot fi anulate. Retrimite același request_id și corp după un răspuns incert. Codul 409 cancellation_not_allowed indică depășirea intervalului de anulare de către client sau o stare care nu mai este eligibilă. Anularea nu restituie plata și nu stornează bonurile fiscale; personalul trebuie să reconcilieze bonurile existente în Nexus ERP.
Parametri
connection_idstringpathobligatoriuexternal_order_idstringpathobligatoriuCorpul cererii application/json
Schemă: CancellationRequest
request_idstringobligatoriuIdentitatea stabilă a anulării. Salvează și retrimite același ID și motiv după rezultate incerte.
lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$"reasonstringobligatoriuMotivul anulării de către client. Nu inițiază niciodată o rambursare.
valori: ["customer_request", "duplicate", "ordered_by_mistake", "other"]Răspunsuri
Successful Response
OrderReceiptDate de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Conexiunea nu este disponibilă pentru acest tenant sau meniul/comanda solicitată nu există.
DetailErrorConflict, de exemplu o revizie de meniu învechită sau un articol epuizat. Codul erorii indică ce trebuie schimbat.
ErrorRezultat neconfirmat. Reîncearcă după cel puțin 5 secunde; păstrează ID-ul și corpul comenzii.
Error | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X POST "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/orders/shop-1001/cancel" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.jsonRăspuns
Fără conținut{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "order_not_found"
}{
"error": "cancellation_not_allowed"
}{
"error": "retail_unavailable",
"retry_same_order_id": true
}{
"error": "rate_limit_exceeded"
}/v1/webhookCitește configurația webhook-ului
Autentificare: WebsiteKey
Întoarce configurația de callback a tenantului. Secretul de semnare nu este întors niciodată prin GET. Un singur callback deservește toate conexiunile POS activate.
Răspunsuri
Configurația curentă de callback; salvează în siguranță orice secret de semnare întors.
WebhookSubscriptionCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Semnarea webhook-urilor nu este activată pe acest gateway. Contactează Nexus; rutele existente pentru comenzi rămân disponibile.
DetailError | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl "https://website.api.pionier.ro/v1/webhook" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Răspuns
Fără conținut{
"detail": "invalid_credentials"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhookConfigurează webhook-ul tenantului
Autentificare: WebsiteKey
Înregistrează un singur callback HTTPS public pe portul 443 folosind cheia website. Setează enabled la false pentru a opri livrarea. Crearea sau schimbarea URL-ului întoarce o singură dată un signing_secret nou și anulează evenimentele din coadă pentru configurația veche. Un PUT identic păstrează secretul și întoarce null pentru signing_secret; înlocuiește-l dacă ai pierdut răspunsul inițial. Comenzile noi primite cât timp webhook-ul este activat sunt urmărite în fundal; istoricul comenzilor existente nu este preluat retroactiv.
Corpul cererii application/json
Schemă: WebhookConfiguration
urlstringobligatoriuURL de callback HTTPS public pe portul 443. Fără parametri de interogare, fragment sau credențiale.
lungime maximă: 2048enabledbooleanopționalActivează notificările despre comenzi, disponibilitate, meniuri și conexiuni. False anulează livrările din coadă.
implicit: trueRăspunsuri
Configurația curentă de callback; salvează în siguranță orice secret de semnare întors.
WebhookSubscriptionDate de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Semnarea webhook-urilor nu este activată pe acest gateway. Contactează Nexus; rutele existente pentru comenzi rămân disponibile.
DetailError | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X PUT "https://website.api.pionier.ro/v1/webhook" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.json{
"url": "https://shop.example.com/nexus/events",
"enabled": true
}Răspuns
Fără conținut{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhook/rotate-secretÎnlocuiește secretul de semnare al webhook-ului
Autentificare: WebsiteKey
Întoarce un secret de semnare nou pentru callback-ul curent. Evenimentele din coadă semnate pentru configurația anterioară sunt anulate. O cerere HTTP deja trimisă poate totuși să ajungă. Înlocuirea cheii API este separată și nu modifică acest secret.
Răspunsuri
Configurația curentă de callback; salvează în siguranță orice secret de semnare întors.
WebhookSubscriptionCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Consultă codul erorii și ghidul de recuperare.
DetailErrorSemnarea webhook-urilor nu este activată pe acest gateway. Contactează Nexus; rutele existente pentru comenzi rămân disponibile.
DetailError | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X POST "https://website.api.pionier.ro/v1/webhook/rotate-secret" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Răspuns
Fără conținut{
"detail": "invalid_credentials"
}{
"detail": "webhook_not_configured"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhook/deliveriesVerifică livrările recente de webhook-uri
Autentificare: WebsiteKey
Întoarce până la 100 de livrări recente pentru acest tenant, cele mai noi primele. Include ID-uri stabile de eveniment, ID-uri de comandă/conexiune, numere de încercări, starea livrării și coduri de eroare fără date sensibile. Corpurile răspunsurilor receptorului și secretele de semnare nu sunt expuse niciodată.
Răspunsuri
Ultimele 100 de înregistrări de livrare pentru acest tenant.
array<WebhookDelivery>Cheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Semnarea webhook-urilor nu este activată pe acest gateway. Contactează Nexus; rutele existente pentru comenzi rămân disponibile.
DetailError | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl "https://website.api.pionier.ro/v1/webhook/deliveries" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Răspuns
Fără conținut{
"detail": "invalid_credentials"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhook/deliveries/{event_id}/retryReîncearcă o livrare epuizată
Autentificare: WebsiteKey
Reintroduce în coadă un eveniment eșuat cu același ID și corp, cu o nouă fereastră de încercări de livrare. Pot fi reîncercate doar evenimentele eșuate ale acestui tenant pentru callback-ul curent activat. Secvența originală a comenzii rămâne neschimbată; receptorii trebuie să ignore secvențele mai vechi.
Parametri
event_idstringpathobligatoriuRăspunsuri
Evenimentul eșuat a fost reintrodus în coadă cu identitatea și corpul originale.
Date de intrare invalide. Sunt întoarse căile și tipurile câmpurilor; valorile introduse sunt omise.
ValidationErrorCheie absentă, invalidă sau cu rol greșit.
DetailErrorAntetWWW-Authenticate Consultă codul erorii și ghidul de recuperare.
DetailErrorSemnarea webhook-urilor nu este activată pe acest gateway. Contactează Nexus; rutele existente pentru comenzi rămân disponibile.
DetailError | objectAntetRetry-After Întârzierea minimă în secunde.Limita de cereri a fost depășită. Așteaptă numărul de secunde din Retry-After și repetă aceeași cerere.
AntetRetry-After Numărul de secunde de așteptat.Cerere
curl -X POST "https://website.api.pionier.ro/v1/webhook/deliveries/$NEXUS_EVENT_ID/retry" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Răspuns
Fără conținut{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "failed_delivery_not_found"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}Modele de date
Câmpurile necunoscute din cereri sunt respinse. Sumele sunt în bani întregi; cantitățile sunt întregi. Cerințele condiționate, precum adresa de livrare și referința plății, sunt descrise în ghiduri.
Address
| Câmp | Contract |
|---|---|
cityobligatoriu | string Orașul de livrare. lungime minimă: 1 · lungime maximă: 100 |
streetobligatoriu | string Strada și numărul. lungime minimă: 1 · lungime maximă: 200 |
detailsopțional | string Apartament, intrare sau alte indicații. lungime maximă: 500 · implicit: "" |
CancellationRequest
| Câmp | Contract |
|---|---|
request_idobligatoriu | string Identitatea stabilă a anulării. Salvează și retrimite același ID și motiv după rezultate incerte. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
reasonobligatoriu | string Motivul anulării de către client. Nu inițiază niciodată o rambursare. valori: ["customer_request", "duplicate", "ordered_by_mistake", "other"] |
Category
| Câmp | Contract |
|---|---|
nameobligatoriu | string Numele secțiunii afișat clienților. lungime minimă: 1 · lungime maximă: 256 |
translationsopțional | object Nume și descrieri indexate după limbă. Folosește name și description când traducerea lipsește. |
idobligatoriu | string ID-ul categoriei la care fac referire produsele. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
CheckoutDiscount
| Câmp | Contract |
|---|---|
codeobligatoriu | string Identificatorul cuponului; eligibilitatea este verificată de backendul website-ului. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
amountobligatoriu | integer Reducere suportată de restaurant, în bani întregi, după promoțiile meniului. Nu poate depăși prețurile de bază eligibile ale produselor. min: 1.0 · max: 100000000.0 |
product_idsopțional | array<string> | null ID-uri unice opționale ale produselor din comandă. Omite pentru toate produsele. Extraopțiunile, garanțiile, ambalajele, livrarea și bacșișul sunt excluse. |
ConnectionList
| Câmp | Contract |
|---|---|
connectionsobligatoriu | array<ConnectionSummary> Conexiunile activate pentru cheia website. Lista este goală până când restaurantul activează una. |
ConnectionSummary
| Câmp | Contract |
|---|---|
idobligatoriu | string ID-ul conexiunii folosit în URL-urile pentru meniu, comandă și stare. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
location_idobligatoriu | string ID-ul locației restaurantului. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
location_nameobligatoriu | string Numele locației afișat clienților. |
pos_idobligatoriu | string ID-ul casei de marcat care primește comenzile. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
pos_nameobligatoriu | string Numele casei de marcat, util pentru asistență. |
Customer
| Câmp | Contract |
|---|---|
nameobligatoriu | string Numele clientului pentru personal și bon. lungime minimă: 1 · lungime maximă: 200 |
phoneobligatoriu | string Numărul de telefon la care personalul poate suna în legătură cu comanda. lungime minimă: 3 · lungime maximă: 40 |
DatePeriod
| Câmp | Contract |
|---|---|
startobligatoriu | string Ora locală de început, inclusivă, HH:mm. |
endobligatoriu | string Sfârșit exclusiv în aceeași zi, HH:mm; este permis 24:00. |
DeliveryStatus
| Câmp | Contract |
|---|---|
statusobligatoriu | string Ultima stare confirmată a livrării. valori: ["assigned", "arrived", "picked_up", "delivered"] |
estimated_pickup_atopțional | string | null Ultima estimare a ridicării sau null. |
estimated_delivery_atopțional | string | null Ultima estimare a livrării sau null. |
picked_up_atopțional | string | null Momentul înregistrat de server la confirmarea ridicării. |
delivered_atopțional | string | null Momentul înregistrat de server la confirmarea livrării. |
DeliveryUpdate
| Câmp | Contract |
|---|---|
request_idobligatoriu | string Identitate stabilă pentru această actualizare a livrării; reîncearcă fără modificări. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
statusobligatoriu | string assigned, arrived, picked_up sau delivered; tranzițiile nu pot reveni la o stare anterioară. valori: ["assigned", "arrived", "picked_up", "delivered"] |
courier_nameopțional | string | null Numele curierului pentru personalul restaurantului; exclus din starea publică și webhook-uri. |
courier_phoneopțional | string | null Telefonul curierului pentru personalul restaurantului; exclus din starea publică și webhook-uri. |
estimated_pickup_atopțional | string | null Ora estimată a ridicării cu offset; null păstrează estimarea anterioară. |
estimated_delivery_atopțional | string | null Ora estimată a livrării cu offset; null păstrează estimarea anterioară. |
Menu
| Câmp | Contract |
|---|---|
revisionobligatoriu | string Versiunea meniului publicat. Trimite-o ca menu_revision. Disponibilitatea și accepting_orders se pot schimba fără o revizie nouă. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
currencyopțional | string Întotdeauna RON. Sumele sunt în bani întregi. implicit: "RON" · valoare: "RON" |
accepting_ordersopțional | boolean False când restaurantul este în pauză sau închis. Continuă să afișezi meniul, dar dezactivează finalizarea comenzii. implicit: true |
opening_hoursopțional | OpeningHours | null Programul curent și excepțiile restaurantului în fusul său orar. Null dacă nu există politică configurată. |
schedulingopțional | SchedulingPolicy Comenzile programate sunt acceptate întotdeauna; durata implicită de preparare stabilește momentul începerii în bucătărie. |
fulfillmentobligatoriu | array<string> Include întotdeauna ridicare și livrare. minimum de elemente: 1 · maximum de elemente: 2 |
delivery_feeopțional | integer Taxă fixă în bani, aplicată o singură dată per comandă cu livrare, niciodată pentru ridicare. min: 0.0 · max: 100000000.0 · implicit: 0 |
tips_enabledopțional | boolean Indică dacă pot fi incluse bacșișuri pentru personalul restaurantului. Necesită configurarea bacșișului în POS; bacșișurile curierului nu sunt incluse. implicit: false |
categoriesobligatoriu | array<Category> Secțiunile meniului. minimum de elemente: 1 · maximum de elemente: 200 |
productsobligatoriu | array<Product> Tot ce poate fi comandat. Fiecare produs face referire la o categorie. minimum de elemente: 1 · maximum de elemente: 5000 |
Modifier
| Câmp | Contract |
|---|---|
nameobligatoriu | string Numele opțiunii afișat clienților. lungime minimă: 1 · lungime maximă: 256 |
translationsopțional | object Nume și descrieri indexate după limbă. Folosește name și description când traducerea lipsește. |
idobligatoriu | string Trimite ca items[].modifiers[].option_id. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
priceobligatoriu | integer Preț suplimentar în bani pentru un extra. Întotdeauna 0 pentru opțiunile variant și bundle. min: 0.0 · max: 100000000.0 |
depositopțional | integer Garanția în bani adăugată la selectare, de exemplu garanția sticlei unei băuturi incluse. min: 0.0 · max: 100000000.0 · implicit: 0 |
availableopțional | boolean False când opțiunea este epuizată. Nu permite selectarea ei. implicit: true |
ModifierGroup
| Câmp | Contract |
|---|---|
nameobligatoriu | string Numele grupului afișat clienților. lungime minimă: 1 · lungime maximă: 256 |
translationsopțional | object Nume și descrieri indexate după limbă. Folosește name și description când traducerea lipsește. |
kindopțional | string variant definește produsul (de exemplu mărimea), bundle este o componentă inclusă, extra este un adaos contra cost. implicit: "extra" · valori: ["extra", "variant", "bundle"] |
idobligatoriu | string Trimite ca items[].modifiers[].group_id. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
minimumopțional | integer Numărul minim de opțiuni diferite pe care trebuie să le aleagă clientul. min: 0.0 · max: 99.0 · implicit: 0 |
maximumopțional | integer Numărul maxim de opțiuni diferite pe care le poate alege clientul. min: 1.0 · max: 99.0 · implicit: 1 |
optionsobligatoriu | array<Modifier> Opțiunile acestui grup. minimum de elemente: 1 · maximum de elemente: 100 |
OpeningHours
| Câmp | Contract |
|---|---|
schedule_enabledopțional | boolean Indică dacă programul săptămânal restricționează comenzile. Excepțiile și pauzele manuale se aplică în continuare. implicit: false |
time_zoneopțional | string Fusul orar IANA folosit pentru programul restaurantului și al produselor. implicit: "Europe/Bucharest" |
periodsopțional | array<OpeningPeriod> Intervale săptămânale de funcționare; sunt permise intervale peste miezul nopții. maximum de elemente: 28 |
special_datesopțional | array<SpecialDate> Înlocuiri complete pentru anumite date locale. Lista periods goală înseamnă închis. maximum de elemente: 366 |
OpeningPeriod
| Câmp | Contract |
|---|---|
dayobligatoriu | integer Zi ISO: luni 1 până la duminică 7. min: 1.0 · max: 7.0 |
startobligatoriu | string Ora locală de început, inclusivă, HH:mm. |
endobligatoriu | string Ora locală de sfârșit, exclusivă, HH:mm; este permis 24:00. O oră anterioară încheie intervalul în ziua următoare. |
OrderLine
| Câmp | Contract |
|---|---|
product_idobligatoriu | string ID-ul unui produs din meniu. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
quantityobligatoriu | integer Numărul de unități, de la 1 la 99. min: 1.0 · max: 99.0 |
modifiersopțional | array<Selection> Toate opțiunile alese de client pentru această linie, inclusiv mărimea și componentele incluse. Fiecare pereche apare cel mult o dată. maximum de elemente: 100 |
notesopțional | string Instrucțiuni pentru această linie, de exemplu „fără ceapă”. lungime maximă: 500 · implicit: "" |
OrderReceipt
| Câmp | Contract |
|---|---|
external_order_idobligatoriu | string ID-ul comenzii tale. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
statusobligatoriu | string Progresul comenzii. La un POST repetat, starea din momentul primei primiri a comenzii. valori: ["pending_acceptance", "accepted", "preparing", "ready", "out_for_delivery", "completed", "rejected", "cancelled"] |
totalobligatoriu | integer Totalul comenzii în bani. min: 0.0 · max: 100000000.0 |
currencyobligatoriu | string Întotdeauna RON. valoare: "RON" |
scheduled_foropțional | string | null Ora cerută inițial pentru onorare sau null pentru comenzile imediate. |
estimated_ready_atopțional | string | null Ora estimată de restaurant după acceptare; poate fi ulterioară orei cerute. |
reasonopțional | string | null Codul motivului de respingere sau anulare, când este disponibil. |
deliveryopțional | DeliveryStatus | null Starea livrării și estimări, fără datele de contact ale curierului; null până la prima raportare. |
refundopțional | RefundStatus | null Sumarul rambursărilor externe raportate sau null înaintea primului raport. |
OrderRequest
| Câmp | Contract |
|---|---|
external_order_idobligatoriu | string ID-ul tău pentru această achiziție. Salvează-l înainte de trimitere și refolosește-l neschimbat la fiecare reîncercare; gateway-ul nu creează niciodată două comenzi pentru același ID. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
menu_revisionobligatoriu | string Revizia meniului folosită la calcularea prețului acestui coș. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
currencyopțional | string Întotdeauna RON. implicit: "RON" · valoare: "RON" |
fulfillmentobligatoriu | string pickup sau delivery. Ambele modalități sunt acceptate. valori: ["delivery", "pickup"] |
scheduled_foropțional | string | null Ora cerută pentru onorare, cu offset explicit. Null înseamnă onorare imediată. |
customerobligatoriu | Customer Persoana care a plasat comanda. |
addressopțional | Address | null Obligatorie pentru livrare; omite sau trimite null pentru ridicare. |
paymentobligatoriu | Payment Cum este plătită comanda. Nexus nu încasează de la client. |
itemsobligatoriu | array<OrderLine> Coșul: între 1 și 100 de linii. minimum de elemente: 1 · maximum de elemente: 100 |
totalobligatoriu | integer Totalul calculat de tine în bani, după reducerile publicate și incluzând garanțiile, ambalajele, taxa de livrare și bacșișul. Gateway-ul recalculează și respinge diferențele. min: 0.0 · max: 100000000.0 |
tipopțional | integer Bacșiș opțional pentru personalul restaurantului în bani, implicit zero. Include-l o singură dată în total. Necesită menu.tips_enabled. min: 0.0 · max: 100000000.0 · implicit: 0 |
checkout_discountopțional | CheckoutDiscount | null Cupon opțional la finalizarea comenzii. Unul per comandă; alocarea este păstrată împreună cu cererea inițială. |
notesopțional | string Instrucțiuni pentru întreaga comandă. Folosește items[].notes pentru un singur produs. lungime maximă: 1000 · implicit: "" |
Payment
| Câmp | Contract |
|---|---|
methodobligatoriu | string paid_online când procesatorul tău a încasat deja de la client; cash_on_fulfillment sau card_on_fulfillment când restaurantul încasează plata. valori: ["paid_online", "cash_on_fulfillment", "card_on_fulfillment"] |
referenceopțional | string | null Referința tranzacției din procesatorul tău de plăți. Obligatorie pentru paid_online; omite pentru celelalte metode. |
Product
| Câmp | Contract |
|---|---|
nameobligatoriu | string Numele produsului afișat clienților. Afișează-l ca text. lungime minimă: 1 · lungime maximă: 256 |
translationsopțional | object Nume și descrieri indexate după limbă. Folosește name și description când traducerea lipsește. |
idobligatoriu | string Trimite ca items[].product_id. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
category_idobligatoriu | string Categoria din care face parte produsul. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
descriptionopțional | string Descriere opțională afișată clienților. Afișeaz-o ca text. lungime maximă: 4000 · implicit: "" |
image_urlopțional | string | null URL HTTP(S) absolut, opțional, pentru imagine. Gateway-ul nu descarcă imaginea. |
scheduleopțional | array<OpeningPeriod> | null Program săptămânal al produsului în opening_hours.time_zone. Null înseamnă fără restricție; o listă goală înseamnă indisponibil toată săptămâna. |
priceobligatoriu | integer Prețul de bază în bani. Pentru un produs cu variante, este înlocuit de prețul variantei selectate. min: 0.0 · max: 100000000.0 |
discountopțional | integer Reducerea publicată în bani per unitate, scăzută din price înaintea garanțiilor, ambalajelor și extra. Implicit zero. Nu trimite o reducere în comandă. min: 0.0 · max: 100000000.0 · implicit: 0 |
depositopțional | integer Garanția în bani per unitate, de exemplu garanția unei sticle. Este înlocuită de garanția variantei selectate. min: 0.0 · max: 100000000.0 · implicit: 0 |
packagingopțional | integer Costul ambalajului în bani per unitate, adăugat peste preț. min: 0.0 · max: 100000000.0 · implicit: 0 |
packaging_product_idopțional | string | null Articolul de ambalaj adăugat de restaurant pe bon. Nu îl adăuga în comandă. |
availableopțional | boolean False când produsul este epuizat sau nu se vinde în această locație. Nu permite selectarea lui. implicit: true |
modifier_groupsopțional | array<ModifierGroup> Opțiunile produsului: variant (de exemplu mărimea), bundle (o componentă inclusă) sau extra (un adaos contra cost). maximum de elemente: 30 |
variantsopțional | array<Variant> Toate combinațiile valide ale opțiunilor de variantă ale produsului, fiecare cu propriul preț. Potrivește alegerile clientului cu una dintre ele. maximum de elemente: 500 |
RefundReport
| Câmp | Contract |
|---|---|
request_idobligatoriu | string Identitate stabilă pentru acest raport final de rambursare; reîncearcă fără modificări. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
processor_referenceobligatoriu | string Referință unică a procesatorului per comandă; păstrată privat pentru reconciliere. lungime minimă: 1 · lungime maximă: 200 |
outcomeobligatoriu | string Rezultat final raportat de website: succeeded sau failed. Nu este verificat cu un procesator. valori: ["succeeded", "failed"] |
amountobligatoriu | integer Suma pozitivă a rambursării în bani, fără rambursările deja raportate. min: 1.0 · max: 100000000.0 |
RefundStatus
| Câmp | Contract |
|---|---|
reported_refunded_amountobligatoriu | integer Suma rambursărilor reușite raportate de website; nu reprezintă verificarea procesatorului. min: 0.0 · max: 100000000.0 |
report_countobligatoriu | integer Numărul rapoartelor finale distincte, inclusiv rambursările eșuate. min: 1.0 · max: 100.0 |
last_outcomeobligatoriu | string Ultimul rezultat raportat: succeeded sau failed. valori: ["succeeded", "failed"] |
last_reported_atobligatoriu | string Momentul înregistrat de server pentru ultimul raport confirmat. |
SchedulingPolicy
| Câmp | Contract |
|---|---|
enabledopțional | boolean Întotdeauna true. Comenzile programate nu necesită activare. implicit: true |
preparation_minutesopțional | integer Durata implicită de preparare; personalul poate adăuga timp la acceptare. min: 1.0 · max: 240.0 · implicit: 20 |
Selection
| Câmp | Contract |
|---|---|
group_idobligatoriu | string ID-ul unui grup de opțiuni al produsului. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
option_idobligatoriu | string ID-ul unei opțiuni din acel grup. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
SpecialDate
| Câmp | Contract |
|---|---|
dateobligatoriu | string Data calendaristică locală, YYYY-MM-DD. |
periodsopțional | array<DatePeriod> Intervale care înlocuiesc întreaga zi. Lista goală înseamnă închis, inclusiv prelungirea din ziua precedentă. maximum de elemente: 8 |
Translation
| Câmp | Contract |
|---|---|
nameobligatoriu | string Numele tradus. Afișează-l ca text. lungime minimă: 1 · lungime maximă: 256 |
descriptionopțional | string Descrierea tradusă. Goală dacă nu a fost completată. Afișeaz-o ca text. lungime maximă: 4000 · implicit: "" |
Variant
| Câmp | Contract |
|---|---|
idobligatoriu | string Identifică această combinație. Nu îl trimite în comenzi; trimite opțiunile în schimb. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
selectionsobligatoriu | array<Selection> Opțiunile de variantă care formează această combinație. maximum de elemente: 100 |
priceobligatoriu | integer Prețul în bani al combinației, care înlocuiește prețul produsului. min: 0.0 · max: 100000000.0 |
discountopțional | integer Reducerea publicată în bani per unitate, scăzută din price înaintea garanțiilor, ambalajelor și extra. Implicit zero. Nu trimite o reducere în comandă. min: 0.0 · max: 100000000.0 · implicit: 0 |
depositopțional | integer Garanția în bani a combinației, care înlocuiește garanția produsului. min: 0.0 · max: 100000000.0 · implicit: 0 |
availableopțional | boolean False când această combinație nu poate fi comandată. implicit: true |
WebhookConfiguration
| Câmp | Contract |
|---|---|
urlobligatoriu | string URL de callback HTTPS public pe portul 443. Fără parametri de interogare, fragment sau credențiale. lungime maximă: 2048 |
enabledopțional | boolean Activează notificările despre comenzi, disponibilitate, meniuri și conexiuni. False anulează livrările din coadă. implicit: true |
WebhookDelivery
| Câmp | Contract |
|---|---|
idobligatoriu | string ID stabil de eveniment. Elimină livrările duplicate folosind această valoare. |
connection_idobligatoriu | string Conexiunea POS identificată de acest eveniment. |
external_order_idobligatoriu | string | null ID-ul comenzii tale sau null pentru toate evenimentele de conexiune și meniu. |
stateobligatoriu | string pending, delivered, failed sau cancelled. Doar evenimentele failed pot fi reîncercate manual. valori: ["pending", "delivered", "failed", "cancelled"] |
attemptsobligatoriu | integer Numărul de încercări de livrare preluate în fereastra curentă de reîncercare. |
last_statusobligatoriu | integer | null Ultimul status HTTP al receptorului sau null când nu s-a primit răspuns. |
failureobligatoriu | string | null Cod de eroare fără date sensibile sau null. Corpurile răspunsurilor receptorului nu sunt expuse niciodată. |
WebhookSubscription
| Câmp | Contract |
|---|---|
urlopțional | string | null URL de callback înregistrat sau null înainte de configurare. |
enabledopțional | boolean Indică dacă urmărirea și livrarea webhook-urilor sunt activate. implicit: false |
signing_secretopțional | string | null Întors doar la creare, schimbarea URL-ului sau înlocuirea secretului. Păstrează-l în siguranță în backend. |
AvailabilityEventData
| Câmp | Contract |
|---|---|
accepting_ordersobligatoriu | boolean Dacă se pot trimite comenzi acum; orele programate trebuie evaluate prin GET meniu. |
reasonobligatoriu | string accepting, paused, closed sau menu_not_published. valori: ["accepting", "paused", "closed", "menu_not_published"] |
pause_untilopțional | string | null Expirarea pauzei în UTC sau null dacă nu există pauză temporizată. Expirarea respectă programul de funcționare. implicit: null |
ConnectionEventData
| Câmp | Contract |
|---|---|
enabledobligatoriu | boolean Dacă această conexiune POS este activată. Recitește lista conexiunilor; conexiunile dezactivate nu pot primi comenzi. |
location_idobligatoriu | string ID-ul locației restaurantului. |
location_nameobligatoriu | string Numele locației afișat clienților. |
pos_idobligatoriu | string ID-ul casei de marcat care primește comenzile. |
pos_nameobligatoriu | string Numele casei de marcat, util pentru asistență. |
DeliveryEventData
| Câmp | Contract |
|---|---|
external_order_idobligatoriu | string ID-ul comenzii tale. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
request_idobligatoriu | string ID-ul stabil al cererii tale de raportare. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
statusobligatoriu | string Starea livrării trimisă în acest raport, nu neapărat ultima stare. valori: ["assigned", "arrived", "picked_up", "delivered"] |
estimated_pickup_atopțional | string | null Estimarea ridicării trimisă în acest raport sau null. implicit: null |
estimated_delivery_atopțional | string | null Estimarea livrării trimisă în acest raport sau null. implicit: null |
MenuEventData
| Câmp | Contract |
|---|---|
revisionobligatoriu | string Revizia publicată la momentul observării. Recitește meniul conexiunii; disponibilitatea se poate schimba fără o revizie nouă. |
RefundEventData
| Câmp | Contract |
|---|---|
external_order_idobligatoriu | string ID-ul comenzii tale. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
request_idobligatoriu | string ID-ul stabil al cererii tale de raportare. lungime minimă: 1 · lungime maximă: 100 · format: "^[A-Za-z0-9_-]+$" |
outcomeobligatoriu | string Rezultat final raportat de website: succeeded sau failed. Nu este verificat cu un procesator. valori: ["succeeded", "failed"] |
amountobligatoriu | integer Suma rambursării pentru acest raport, în bani. min: 0 · max: 100000000 |
SettingsEventData
| Câmp | Contract |
|---|---|
settings_versionobligatoriu | string Amprenta opacă a setărilor de funcționare observate. Recitește meniul conexiunii pentru opening_hours și scheduling curente; aceasta nu este o revizie de meniu. format: "^[a-f0-9]{64}$" |
WebhookEvent
| Câmp | Contract |
|---|---|
idobligatoriu | string ID stabil de eveniment. Elimină livrările duplicate folosind această valoare. format: "^evt_[a-f0-9]{48}$" |
typeobligatoriu | string Actualizări ale comenzilor, rapoarte de livrare/rambursare, disponibilitatea restaurantului, meniuri sau modificări ale conexiunilor POS. valori: ["order.status_changed", "order.updated", "order.delivery_updated", "refund.reported", "connection.availability_changed", "menu.published", "menu.availability_changed", "connection.changed", "connection.settings_changed"] |
sequenceobligatoriu | integer Secvență crescătoare per comandă; evenimentele fără comandă au secvențe separate pentru fiecare conexiune și tip de eveniment. Ignoră actualizările mai vechi. min: 1 |
observed_atobligatoriu | string Momentul observării în UTC, nu momentul acțiunii din restaurant. |
connection_idobligatoriu | string Conexiunea POS identificată de acest eveniment. |
dataobligatoriu | OrderReceipt | RefundEventData | DeliveryEventData | AvailabilityEventData | MenuEventData | ConnectionEventData | SettingsEventData Datele depind de tip: OrderReceipt, DeliveryEventData, RefundEventData, AvailabilityEventData, MenuEventData, ConnectionEventData sau SettingsEventData. |