Explore the exact contract served by this gateway. Types, constraints and examples below come from its OpenAPI schema.
/healthCheck process liveness
Authentication: No authentication
Returns 200 while the gateway process is running. Needs no key. It doesn't check menus or the restaurant's systems.
Responses
The gateway process is running.
objectRequest
curl "https://website.api.pionier.ro/health"Response
No content/v1/connectionsDiscover enabled points of sale
Authentication: WebsiteKey
Lists the locations and registers that can receive orders with your website key. Use a connection's id in every menu, order and status request, even when there is only one. An empty list means the restaurant hasn't enabled website ordering yet.
Responses
Connections enabled for your website key.
ConnectionListMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Outcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
curl "https://website.api.pionier.ro/v1/connections" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Response
No content{
"detail": "invalid_credentials"
}{
"error": "storage_unavailable"
}{
"error": "rate_limit_exceeded"
}/v1/connections/{connection_id}/menuRead the restaurant menu
Authentication: WebsiteKey
Returns the menu published for this connection. Amounts are integer bani. Send the revision and IDs from this menu in the order. Availability and accepting_orders can change without a new revision, so fetch the menu again just before checkout.
Parameters
connection_idstringpathrequiredfulfillment_atstring | nullqueryoptionalResponses
The published menu for this connection.
MenuInvalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Connection unavailable to this tenant, or the requested menu/order does not exist.
DetailErrorConflict, such as an outdated menu revision or a sold-out item. The error code says what to change.
ErrorOutcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
curl "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/menu" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Response
{
"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/menuPublish a complete menu
Authentication: PublisherKey
Used by Nexus Retail with a publisher key; website integrations never call it. Revisions are immutable. Include the required positive X-Website-Publication generation. An identical retry with the same generation is idempotent unless a newer generation has arrived; obsolete generations or changed contents under the same generation return 409 publication_superseded.
Parameters
x-website-publicationintegerheaderrequiredRequest body application/json
Schema: Menu
revisionstringrequiredVersion of the published menu. Send it as menu_revision. Availability and accepting_orders can change without a new revision.
min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$"currencystringoptionalAlways RON. Amounts are integer bani.
default: "RON" · value: "RON"accepting_ordersbooleanoptionalFalse while the restaurant is paused or closed. Keep showing the menu but disable checkout.
default: trueCurrent restaurant hours and date exceptions in its local time zone. Null when no policy is configured.
Scheduled orders are always supported; default preparation duration controls kitchen timing.
fulfillmentarray<string>requiredAlways includes pickup and delivery.
min items: 1 · max items: 2delivery_feeintegeroptionalFixed fee in bani, charged once per delivery order and never for pickup.
min: 0.0 · max: 100000000.0 · default: 0tips_enabledbooleanoptionalWhether restaurant staff tips can be included. Requires the POS tip configuration; courier tips are not included.
default: falseMenu sections.
min items: 1 · max items: 200Everything that can be ordered. Each product references a category.
min items: 1 · max items: 5000Responses
The menu was published, or an identical copy was already published.
Invalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Conflict, such as an outdated menu revision or a sold-out item. The error code says what to change.
ErrorRequest body exceeds 4 MiB.
ErrorOutcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
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
}
]
}
]
}Response
No content{
"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}/ordersSubmit an order
Authentication: WebsiteKey
Sends an order to the restaurant. 201 means the restaurant received it; staff still have to accept it. Resending the identical request returns 200 with the original receipt and never creates a second order. After a timeout or 503, resend the same external_order_id and body. Receive progress through webhooks; use GET to reconcile missed updates or when webhooks are unavailable.
Parameters
connection_idstringpathrequiredRequest body application/json
Schema: OrderRequest
external_order_idstringrequiredYour ID for this purchase. Save it before sending and reuse it unchanged on every retry; the gateway never creates two orders for one ID.
min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$"menu_revisionstringrequiredThe revision of the menu used to price this cart.
min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$"currencystringoptionalAlways RON.
default: "RON" · value: "RON"fulfillmentstringrequiredpickup or delivery. Both modes are supported.
values: ["delivery", "pickup"]scheduled_forstring | nulloptionalRequested fulfillment timestamp with explicit offset. Null means immediate fulfillment.
Who placed the order.
Required for delivery; omit or send null for pickup.
How the order is paid. Nexus doesn't charge the customer.
The cart: 1 to 100 lines.
min items: 1 · max items: 100totalintegerrequiredYour calculated total in bani, after published discounts and including deposits, packaging, delivery fee and tip. The gateway recalculates and rejects a mismatch.
min: 0.0 · max: 100000000.0tipintegeroptionalOptional restaurant staff tip in bani, default zero. Include it once in total. Requires menu.tips_enabled.
min: 0.0 · max: 100000000.0 · default: 0Optional checkout coupon. One per order; allocation is frozen with the original request.
notesstringoptionalInstructions for the whole order. Use items[].notes for a single product.
max length: 1000 · default: ""Responses
The restaurant received the order; it is waiting for staff to accept it.
OrderReceiptThe identical order was already received; returns its original receipt.
OrderReceiptConflict, such as an outdated menu revision or a sold-out item. The error code says what to change.
ErrorOutcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Invalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Request body exceeds 4 MiB.
ErrorConnection unavailable to this tenant, or the requested menu/order does not exist.
DetailErrorRate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
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
}Response
{
"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}Read current order status
Authentication: WebsiteKey
Returns the order's current status from the restaurant. Use it to reconcile webhook notifications or poll when webhooks are not configured. A 503 means the status couldn't be read, not that the order was rejected. Stop polling on completed, rejected or cancelled.
Parameters
connection_idstringpathrequiredexternal_order_idstringpathrequiredResponses
The order's current status.
OrderReceiptInvalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Connection unavailable to this tenant, or the requested menu/order does not exist.
DetailErrorOutcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
curl "https://website.api.pionier.ro/v1/connections/$NEXUS_CONNECTION_ID/orders/shop-1001" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Response
{
"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}/refundsReport an external refund outcome
Authentication: WebsiteKey
Record a final succeeded or failed refund performed by your payment provider. This does not initiate or verify a refund and does not reverse a Retail receipt. Only paid_online orders are eligible. Save request_id and retry the identical body after an uncertain response. Each processor_reference is unique per order; at most 100 reports. Successful amounts cannot exceed the original order total.
Parameters
connection_idstringpathrequiredexternal_order_idstringpathrequiredRequest body application/json
Schema: RefundReport
request_idstringrequiredStable identity for this final refund report; retry unchanged.
min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$"processor_referencestringrequiredUnique processor reference per order; retained privately for reconciliation.
min length: 1 · max length: 200outcomestringrequiredFinal outcome reported by your website: succeeded or failed. Not verified with a processor.
values: ["succeeded", "failed"]amountintegerrequiredPositive refund amount in bani, excluding refunds already reported.
min: 1.0 · max: 100000000.0Responses
Successful Response
OrderReceiptInvalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Connection unavailable to this tenant, or the requested menu/order does not exist.
DetailErrorConflict, such as an outdated menu revision or a sold-out item. The error code says what to change.
ErrorOutcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
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.jsonResponse
No content{
"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}/deliveryReport delivery progress
Authentication: WebsiteKey
Send a stable request_id for each update and retry its unchanged body after an uncertain result. Delivery orders only: assignment requires acceptance, pickup requires ready, and delivered requires picked_up. At most 100 distinct updates per order. Omitted contact details and estimates preserve previous values. This never records payment collection.
Parameters
connection_idstringpathrequiredexternal_order_idstringpathrequiredRequest body application/json
Schema: DeliveryUpdate
request_idstringrequiredStable identity for this delivery update; retry unchanged.
min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$"statusstringrequiredassigned, arrived, picked_up or delivered; transitions cannot move backwards.
values: ["assigned", "arrived", "picked_up", "delivered"]courier_namestring | nulloptionalCourier name for restaurant staff; excluded from public status and webhooks.
courier_phonestring | nulloptionalCourier phone for restaurant staff; excluded from public status and webhooks.
estimated_pickup_atstring | nulloptionalEstimated pickup timestamp with offset; null preserves the previous estimate.
estimated_delivery_atstring | nulloptionalEstimated delivery timestamp with offset; null preserves the previous estimate.
Responses
Successful Response
OrderReceiptInvalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Connection unavailable to this tenant, or the requested menu/order does not exist.
DetailErrorConflict, such as an outdated menu revision or a sold-out item. The error code says what to change.
ErrorOutcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
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.jsonResponse
No content{
"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}/cancelCancel an eligible order
Authentication: WebsiteKey
Immediate orders can be cancelled before acceptance. Accepted scheduled orders can be cancelled strictly before their persisted preparation start, provided preparation has not begun. Later cancellation requires restaurant staff approval in Retail; completed orders cannot be cancelled. Retry the identical request_id and body after an uncertain response. A 409 cancellation_not_allowed means the order is outside the customer cancellation window or no longer eligible. Cancellation does not refund payment or reverse fiscal receipts; staff must reconcile existing receipts in Nexus ERP.
Parameters
connection_idstringpathrequiredexternal_order_idstringpathrequiredRequest body application/json
Schema: CancellationRequest
request_idstringrequiredStable cancellation identity. Save and resend the same ID and reason after uncertain outcomes.
min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$"reasonstringrequiredCustomer cancellation reason. This never initiates a refund.
values: ["customer_request", "duplicate", "ordered_by_mistake", "other"]Responses
Successful Response
OrderReceiptInvalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Connection unavailable to this tenant, or the requested menu/order does not exist.
DetailErrorConflict, such as an outdated menu revision or a sold-out item. The error code says what to change.
ErrorOutcome unconfirmed. Retry after at least 5 seconds; preserve order ID and body.
Error | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
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.jsonResponse
No content{
"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/webhookRead webhook configuration
Authentication: WebsiteKey
Returns this tenant's callback configuration. The signing secret is never returned by GET. One callback serves every enabled POS connection.
Responses
Current callback configuration; save any returned signing secret securely.
WebhookSubscriptionMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Webhook signing is not enabled on this gateway. Contact Nexus; existing order routes remain available.
DetailError | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
curl "https://website.api.pionier.ro/v1/webhook" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Response
No content{
"detail": "invalid_credentials"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhookConfigure a tenant webhook
Authentication: WebsiteKey
Register one public HTTPS callback on port 443 using your website key. Set enabled to false to stop delivery. Creating or changing the URL returns a new signing_secret once and cancels queued events for the old configuration. An identical PUT preserves the secret and returns null for signing_secret; rotate it if the initial response was lost. New orders received while enabled are watched in the background; existing order history is not backfilled.
Request body application/json
Schema: WebhookConfiguration
urlstringrequiredPublic HTTPS callback URL on port 443. No query, fragment or credentials.
max length: 2048enabledbooleanoptionalEnable order, availability, menu and connection notifications. False cancels queued deliveries.
default: trueResponses
Current callback configuration; save any returned signing secret securely.
WebhookSubscriptionInvalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Webhook signing is not enabled on this gateway. Contact Nexus; existing order routes remain available.
DetailError | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
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
}Response
No content{
"error": "invalid_request",
"fields": [
{
"path": [
"body",
"total"
],
"type": "int_type"
}
]
}{
"detail": "invalid_credentials"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhook/rotate-secretRotate the webhook signing secret
Authentication: WebsiteKey
Returns a new signing secret for the current callback. Queued events signed for the previous configuration are cancelled. An in-flight HTTP request can still arrive. API key rotation is separate and does not change this secret.
Responses
Current callback configuration; save any returned signing secret securely.
WebhookSubscriptionMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate See the error code and recovery guide.
DetailErrorWebhook signing is not enabled on this gateway. Contact Nexus; existing order routes remain available.
DetailError | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
curl -X POST "https://website.api.pionier.ro/v1/webhook/rotate-secret" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Response
No content{
"detail": "invalid_credentials"
}{
"detail": "webhook_not_configured"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhook/deliveriesInspect recent webhook deliveries
Authentication: WebsiteKey
Returns up to 100 recent deliveries for this tenant, newest first. Includes stable event IDs, order/connection IDs, attempt counts, delivery state and sanitized failure codes. Receiver response bodies and signing secrets are never exposed.
Responses
Latest 100 delivery records for this tenant.
array<WebhookDelivery>Missing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate Webhook signing is not enabled on this gateway. Contact Nexus; existing order routes remain available.
DetailError | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
curl "https://website.api.pionier.ro/v1/webhook/deliveries" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Response
No content{
"detail": "invalid_credentials"
}{
"detail": "webhooks_not_configured"
}{
"error": "rate_limit_exceeded"
}/v1/webhook/deliveries/{event_id}/retryRetry an exhausted delivery
Authentication: WebsiteKey
Requeues a failed event with the same event ID and body, with a fresh delivery attempt window. Only this tenant's failed events for the current enabled callback can be retried. The original per-order sequence remains unchanged; receivers must ignore older sequences.
Parameters
event_idstringpathrequiredResponses
The failed event was requeued with its original identity and body.
Invalid input. Field paths and types are returned; input values are omitted.
ValidationErrorMissing, invalid or wrong-role key.
DetailErrorHeaderWWW-Authenticate See the error code and recovery guide.
DetailErrorWebhook signing is not enabled on this gateway. Contact Nexus; existing order routes remain available.
DetailError | objectHeaderRetry-After Minimum delay in seconds.Rate limit exceeded. Wait Retry-After seconds and retry the identical request.
HeaderRetry-After Seconds to wait.Request
curl -X POST "https://website.api.pionier.ro/v1/webhook/deliveries/$NEXUS_EVENT_ID/retry" \
-H "Authorization: Bearer $NEXUS_WEBSITE_KEY"Response
No content{
"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"
}Data models
Unknown request fields are rejected. Monetary amounts are integer bani; quantities are integers. Conditional requirements such as delivery addresses and payment references are described in the guides.
Address
| Field | Contract |
|---|---|
cityrequired | string Delivery city. min length: 1 · max length: 100 |
streetrequired | string Street and number. min length: 1 · max length: 200 |
detailsoptional | string Apartment, entrance or other directions. max length: 500 · default: "" |
CancellationRequest
| Field | Contract |
|---|---|
request_idrequired | string Stable cancellation identity. Save and resend the same ID and reason after uncertain outcomes. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
reasonrequired | string Customer cancellation reason. This never initiates a refund. values: ["customer_request", "duplicate", "ordered_by_mistake", "other"] |
Category
| Field | Contract |
|---|---|
namerequired | string Section name to show customers. min length: 1 · max length: 256 |
translationsoptional | object Locale-keyed names and descriptions. Fall back to name and description when a translation is absent. |
idrequired | string Category ID referenced by products. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
CheckoutDiscount
| Field | Contract |
|---|---|
coderequired | string Website coupon identifier; eligibility is checked by the website backend. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
amountrequired | integer Restaurant-funded discount in integer bani, after menu promotions. Cannot exceed the eligible product base prices. min: 1.0 · max: 100000000.0 |
product_idsoptional | array<string> | null Optional unique product IDs from this order. Omit for all products. Extras, deposits, packaging, delivery and tips are excluded. |
ConnectionList
| Field | Contract |
|---|---|
connectionsrequired | array<ConnectionSummary> Connections enabled for your website key. Empty until the restaurant enables one. |
ConnectionSummary
| Field | Contract |
|---|---|
idrequired | string Connection ID to use in menu, order and status URLs. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
location_idrequired | string The restaurant location's ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
location_namerequired | string Location name to show customers. |
pos_idrequired | string The receiving register's ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
pos_namerequired | string Register name, useful for support. |
Customer
| Field | Contract |
|---|---|
namerequired | string Customer name for staff and the receipt. min length: 1 · max length: 200 |
phonerequired | string Phone number staff can call about the order. min length: 3 · max length: 40 |
DatePeriod
| Field | Contract |
|---|---|
startrequired | string Inclusive local start time, HH:mm. |
endrequired | string Exclusive end on the same date, HH:mm; 24:00 is allowed. |
DeliveryStatus
| Field | Contract |
|---|---|
statusrequired | string Last committed delivery progress. values: ["assigned", "arrived", "picked_up", "delivered"] |
estimated_pickup_atoptional | string | null Latest pickup estimate, or null. |
estimated_delivery_atoptional | string | null Latest delivery estimate, or null. |
picked_up_atoptional | string | null Server timestamp when pickup was recorded. |
delivered_atoptional | string | null Server timestamp when delivery was recorded. |
DeliveryUpdate
| Field | Contract |
|---|---|
request_idrequired | string Stable identity for this delivery update; retry unchanged. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
statusrequired | string assigned, arrived, picked_up or delivered; transitions cannot move backwards. values: ["assigned", "arrived", "picked_up", "delivered"] |
courier_nameoptional | string | null Courier name for restaurant staff; excluded from public status and webhooks. |
courier_phoneoptional | string | null Courier phone for restaurant staff; excluded from public status and webhooks. |
estimated_pickup_atoptional | string | null Estimated pickup timestamp with offset; null preserves the previous estimate. |
estimated_delivery_atoptional | string | null Estimated delivery timestamp with offset; null preserves the previous estimate. |
Menu
| Field | Contract |
|---|---|
revisionrequired | string Version of the published menu. Send it as menu_revision. Availability and accepting_orders can change without a new revision. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
currencyoptional | string Always RON. Amounts are integer bani. default: "RON" · value: "RON" |
accepting_ordersoptional | boolean False while the restaurant is paused or closed. Keep showing the menu but disable checkout. default: true |
opening_hoursoptional | OpeningHours | null Current restaurant hours and date exceptions in its local time zone. Null when no policy is configured. |
schedulingoptional | SchedulingPolicy Scheduled orders are always supported; default preparation duration controls kitchen timing. |
fulfillmentrequired | array<string> Always includes pickup and delivery. min items: 1 · max items: 2 |
delivery_feeoptional | integer Fixed fee in bani, charged once per delivery order and never for pickup. min: 0.0 · max: 100000000.0 · default: 0 |
tips_enabledoptional | boolean Whether restaurant staff tips can be included. Requires the POS tip configuration; courier tips are not included. default: false |
categoriesrequired | array<Category> Menu sections. min items: 1 · max items: 200 |
productsrequired | array<Product> Everything that can be ordered. Each product references a category. min items: 1 · max items: 5000 |
Modifier
| Field | Contract |
|---|---|
namerequired | string Option name to show customers. min length: 1 · max length: 256 |
translationsoptional | object Locale-keyed names and descriptions. Fall back to name and description when a translation is absent. |
idrequired | string Send as items[].modifiers[].option_id. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
pricerequired | integer Added price in bani for an extra. Always 0 for variant and bundle options. min: 0.0 · max: 100000000.0 |
depositoptional | integer Deposit in bani added when selected, such as a bottle deposit on an included drink. min: 0.0 · max: 100000000.0 · default: 0 |
availableoptional | boolean False when sold out. Don't let customers select it. default: true |
ModifierGroup
| Field | Contract |
|---|---|
namerequired | string Group name to show customers. min length: 1 · max length: 256 |
translationsoptional | object Locale-keyed names and descriptions. Fall back to name and description when a translation is absent. |
kindoptional | string variant defines the product (for example size), bundle is an included item, extra is a paid addition. default: "extra" · values: ["extra", "variant", "bundle"] |
idrequired | string Send as items[].modifiers[].group_id. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
minimumoptional | integer Fewest different options the customer must choose. min: 0.0 · max: 99.0 · default: 0 |
maximumoptional | integer Most different options the customer may choose. min: 1.0 · max: 99.0 · default: 1 |
optionsrequired | array<Modifier> The options in this group. min items: 1 · max items: 100 |
OpeningHours
| Field | Contract |
|---|---|
schedule_enabledoptional | boolean Whether weekly hours restrict ordering. Date exceptions and manual pauses still apply. default: false |
time_zoneoptional | string IANA time zone used for restaurant and product hours. default: "Europe/Bucharest" |
periodsoptional | array<OpeningPeriod> Weekly opening intervals; overnight intervals are allowed. max items: 28 |
special_datesoptional | array<SpecialDate> Whole-day replacements for specific local dates. Empty periods means closed. max items: 366 |
OpeningPeriod
| Field | Contract |
|---|---|
dayrequired | integer ISO weekday: Monday 1 through Sunday 7. min: 1.0 · max: 7.0 |
startrequired | string Inclusive local start time, HH:mm. |
endrequired | string Exclusive local end time, HH:mm; 24:00 is allowed. An earlier time ends the next day. |
OrderLine
| Field | Contract |
|---|---|
product_idrequired | string A product ID from the menu. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
quantityrequired | integer Number of units, 1 to 99. min: 1.0 · max: 99.0 |
modifiersoptional | array<Selection> Every option the customer chose for this line, including size and included items. Each pair at most once. max items: 100 |
notesoptional | string Instructions for this line, such as 'no onions'. max length: 500 · default: "" |
OrderReceipt
| Field | Contract |
|---|---|
external_order_idrequired | string Your order ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
statusrequired | string The order's progress. On a repeated POST, the status from when the order was first received. values: ["pending_acceptance", "accepted", "preparing", "ready", "out_for_delivery", "completed", "rejected", "cancelled"] |
totalrequired | integer The order total in bani. min: 0.0 · max: 100000000.0 |
currencyrequired | string Always RON. value: "RON" |
scheduled_foroptional | string | null Original requested fulfillment timestamp, or null for immediate orders. |
estimated_ready_atoptional | string | null Restaurant ready estimate after acceptance; may be later than the requested time. |
reasonoptional | string | null Rejection or cancellation reason code, when available. |
deliveryoptional | DeliveryStatus | null Delivery progress and estimates without courier contact details; null until reported. |
refundoptional | RefundStatus | null External refund reporting summary, or null before the first report. |
OrderRequest
| Field | Contract |
|---|---|
external_order_idrequired | string Your ID for this purchase. Save it before sending and reuse it unchanged on every retry; the gateway never creates two orders for one ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
menu_revisionrequired | string The revision of the menu used to price this cart. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
currencyoptional | string Always RON. default: "RON" · value: "RON" |
fulfillmentrequired | string pickup or delivery. Both modes are supported. values: ["delivery", "pickup"] |
scheduled_foroptional | string | null Requested fulfillment timestamp with explicit offset. Null means immediate fulfillment. |
customerrequired | Customer Who placed the order. |
addressoptional | Address | null Required for delivery; omit or send null for pickup. |
paymentrequired | Payment How the order is paid. Nexus doesn't charge the customer. |
itemsrequired | array<OrderLine> The cart: 1 to 100 lines. min items: 1 · max items: 100 |
totalrequired | integer Your calculated total in bani, after published discounts and including deposits, packaging, delivery fee and tip. The gateway recalculates and rejects a mismatch. min: 0.0 · max: 100000000.0 |
tipoptional | integer Optional restaurant staff tip in bani, default zero. Include it once in total. Requires menu.tips_enabled. min: 0.0 · max: 100000000.0 · default: 0 |
checkout_discountoptional | CheckoutDiscount | null Optional checkout coupon. One per order; allocation is frozen with the original request. |
notesoptional | string Instructions for the whole order. Use items[].notes for a single product. max length: 1000 · default: "" |
Payment
| Field | Contract |
|---|---|
methodrequired | string paid_online when your payment provider has already charged the customer; cash_on_fulfillment or card_on_fulfillment when the restaurant collects payment. values: ["paid_online", "cash_on_fulfillment", "card_on_fulfillment"] |
referenceoptional | string | null Your payment provider's transaction reference. Required for paid_online; omit for the other methods. |
Product
| Field | Contract |
|---|---|
namerequired | string Product name to show customers. Render as text. min length: 1 · max length: 256 |
translationsoptional | object Locale-keyed names and descriptions. Fall back to name and description when a translation is absent. |
idrequired | string Send as items[].product_id. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
category_idrequired | string The category this product belongs to. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
descriptionoptional | string Optional description to show customers. Render as text. max length: 4000 · default: "" |
image_urloptional | string | null Optional absolute HTTP(S) image URL. The gateway does not fetch the image. |
scheduleoptional | array<OpeningPeriod> | null Weekly product hours in opening_hours.time_zone. Null is unrestricted; an empty list means unavailable all week. |
pricerequired | integer Base price in bani. For a product with variants, the selected variant's price replaces it. min: 0.0 · max: 100000000.0 |
discountoptional | integer Published discount in bani per unit, subtracted from price before deposits, packaging and extras. Defaults to zero. Never send a discount in an order. min: 0.0 · max: 100000000.0 · default: 0 |
depositoptional | integer Deposit in bani per unit, such as a bottle deposit. A selected variant's deposit replaces it. min: 0.0 · max: 100000000.0 · default: 0 |
packagingoptional | integer Packaging charge in bani per unit, added on top of the price. min: 0.0 · max: 100000000.0 · default: 0 |
packaging_product_idoptional | string | null The packaging item the restaurant adds to the receipt. Don't add it to your order. |
availableoptional | boolean False when sold out or not sold at this location. Don't let customers select it. default: true |
modifier_groupsoptional | array<ModifierGroup> Choices for this product: variant (such as size), bundle (an included item) or extra (a paid addition). max items: 30 |
variantsoptional | array<Variant> Every valid combination of the product's variant choices, each with its own price. Match the customer's choices to one of them. max items: 500 |
RefundReport
| Field | Contract |
|---|---|
request_idrequired | string Stable identity for this final refund report; retry unchanged. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
processor_referencerequired | string Unique processor reference per order; retained privately for reconciliation. min length: 1 · max length: 200 |
outcomerequired | string Final outcome reported by your website: succeeded or failed. Not verified with a processor. values: ["succeeded", "failed"] |
amountrequired | integer Positive refund amount in bani, excluding refunds already reported. min: 1.0 · max: 100000000.0 |
RefundStatus
| Field | Contract |
|---|---|
reported_refunded_amountrequired | integer Sum of successful refund amounts reported by your website; not processor verification. min: 0.0 · max: 100000000.0 |
report_countrequired | integer Number of distinct final reports, including failed refunds. min: 1.0 · max: 100.0 |
last_outcomerequired | string Last reported outcome: succeeded or failed. values: ["succeeded", "failed"] |
last_reported_atrequired | string Server timestamp of the most recently committed report. |
SchedulingPolicy
| Field | Contract |
|---|---|
enabledoptional | boolean Always true. Scheduled orders do not require opt-in. default: true |
preparation_minutesoptional | integer Default preparation duration; staff may add time at acceptance. min: 1.0 · max: 240.0 · default: 20 |
Selection
| Field | Contract |
|---|---|
group_idrequired | string A modifier group ID from the product. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
option_idrequired | string An option ID from that group. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
SpecialDate
| Field | Contract |
|---|---|
daterequired | string Local calendar date, YYYY-MM-DD. |
periodsoptional | array<DatePeriod> Intervals replacing the whole date. Empty means closed, including previous-day spillover. max items: 8 |
Translation
| Field | Contract |
|---|---|
namerequired | string Localized name. Render as text. min length: 1 · max length: 256 |
descriptionoptional | string Localized description. Empty when not provided. Render as text. max length: 4000 · default: "" |
Variant
| Field | Contract |
|---|---|
idrequired | string Identifies the combination. Don't send it in orders; send the choices instead. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
selectionsrequired | array<Selection> The variant choices that make up this combination. max items: 100 |
pricerequired | integer Price in bani for this combination, replacing the product price. min: 0.0 · max: 100000000.0 |
discountoptional | integer Published discount in bani per unit, subtracted from price before deposits, packaging and extras. Defaults to zero. Never send a discount in an order. min: 0.0 · max: 100000000.0 · default: 0 |
depositoptional | integer Deposit in bani for this combination, replacing the product deposit. min: 0.0 · max: 100000000.0 · default: 0 |
availableoptional | boolean False when this combination can't be ordered. default: true |
WebhookConfiguration
| Field | Contract |
|---|---|
urlrequired | string Public HTTPS callback URL on port 443. No query, fragment or credentials. max length: 2048 |
enabledoptional | boolean Enable order, availability, menu and connection notifications. False cancels queued deliveries. default: true |
WebhookDelivery
| Field | Contract |
|---|---|
idrequired | string Stable event ID. Deduplicate deliveries using this value. |
connection_idrequired | string POS connection identified by this event. |
external_order_idrequired | string | null Your order ID, or null for all connection and menu events. |
staterequired | string pending, delivered, failed or cancelled. Only failed events can be manually retried. values: ["pending", "delivered", "failed", "cancelled"] |
attemptsrequired | integer Number of claimed delivery attempts in the current retry window. |
last_statusrequired | integer | null Last receiver HTTP status, or null when no response was received. |
failurerequired | string | null Safe failure code, or null. Receiver response bodies are never exposed. |
WebhookSubscription
| Field | Contract |
|---|---|
urloptional | string | null Registered callback URL, or null before configuration. |
enabledoptional | boolean Whether webhook watching and delivery are enabled. default: false |
signing_secretoptional | string | null Returned only when creating, changing the URL or rotating the secret. Store it securely in your backend. |
AvailabilityEventData
| Field | Contract |
|---|---|
accepting_ordersrequired | boolean Whether checkout is available now; scheduled slots must be evaluated through GET menu. |
reasonrequired | string accepting, paused, closed or menu_not_published. values: ["accepting", "paused", "closed", "menu_not_published"] |
pause_untiloptional | string | null UTC pause expiry, or null for no timed pause. Expiry still respects opening hours. default: null |
ConnectionEventData
| Field | Contract |
|---|---|
enabledrequired | boolean Whether this POS connection is enabled. Refresh the connection list; disabled connections cannot receive orders. |
location_idrequired | string The restaurant location's ID. |
location_namerequired | string Location name to show customers. |
pos_idrequired | string The receiving register's ID. |
pos_namerequired | string Register name, useful for support. |
DeliveryEventData
| Field | Contract |
|---|---|
external_order_idrequired | string Your order ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
request_idrequired | string Your stable report request ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
statusrequired | string Delivery state submitted in this report, not necessarily the latest state. values: ["assigned", "arrived", "picked_up", "delivered"] |
estimated_pickup_atoptional | string | null Pickup estimate supplied in this report, or null. default: null |
estimated_delivery_atoptional | string | null Delivery estimate supplied in this report, or null. default: null |
MenuEventData
| Field | Contract |
|---|---|
revisionrequired | string Published revision at observation time. Refresh the connection menu; availability can change without a new revision. |
RefundEventData
| Field | Contract |
|---|---|
external_order_idrequired | string Your order ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
request_idrequired | string Your stable report request ID. min length: 1 · max length: 100 · pattern: "^[A-Za-z0-9_-]+$" |
outcomerequired | string Final outcome reported by your website: succeeded or failed. Not verified with a processor. values: ["succeeded", "failed"] |
amountrequired | integer Refund amount for this report, in bani. min: 0 · max: 100000000 |
SettingsEventData
| Field | Contract |
|---|---|
settings_versionrequired | string Opaque fingerprint of observed operating settings. Refresh the connection menu for current opening_hours and scheduling; this is not a menu revision. pattern: "^[a-f0-9]{64}$" |
WebhookEvent
| Field | Contract |
|---|---|
idrequired | string Stable event ID. Deduplicate deliveries using this value. pattern: "^evt_[a-f0-9]{48}$" |
typerequired | string Order updates, delivery/refund reports, restaurant availability, menus or POS connection changes. values: ["order.status_changed", "order.updated", "order.delivery_updated", "refund.reported", "connection.availability_changed", "menu.published", "menu.availability_changed", "connection.changed", "connection.settings_changed"] |
sequencerequired | integer Increasing per-order sequence; non-order events use a separate sequence for each connection and event type. Ignore older updates. min: 1 |
observed_atrequired | string UTC observation time, not the time of the restaurant action. |
connection_idrequired | string POS connection identified by this event. |
datarequired | OrderReceipt | RefundEventData | DeliveryEventData | AvailabilityEventData | MenuEventData | ConnectionEventData | SettingsEventData Payload depends on type: OrderReceipt, DeliveryEventData, RefundEventData, AvailabilityEventData, MenuEventData, ConnectionEventData or SettingsEventData. |