vGrubs
API Docs
vgrubs.com

Send New Order

You call vGrubs
POSThttps://sandbox.vgrubs.com/partner/orders/{partner-name}
{partner-name} Your partner identifier, provisioned by vGrubs during onboarding. The webhook path is unique per partner.

When a customer places an order on your platform, you push it to the vGrubs webhook endpoint. vGrubs defines this path and shares it with you during onboarding. It is unique per partner.

vGrubs responds with HTTP 200 OK to confirm receipt. If the request fails with a network error or a 5xx, retry with exponential backoff. A 400 means the payload is invalid: fix it instead of retrying.

The status field in the order payload must always be new on the initial push.
Send only an order.type the store lists in supported_order_types (returned by Get Fees, Get Merchant Timezone and Publish Menu). Virtual stores accept delivery only, so a pickup order for one is rejected.
Cash orders are accepted only for pickup orders, at physical stores, and only when cash is enabled for your account. Call Get Fees first and offer cash only when cash_pickup_allowed is true. Cash delivery orders are rejected.
All monetary values are in cents (e.g. 3600 = $36.00). Timestamps are ISO 8601. Phone numbers use E.164 format.
The production URL is provided by vGrubs once the integration is fully tested and ready to go live.

Request body

orderobjectrequired

Core order details.

merchantobjectrequired

The store the order belongs to.

customerobjectrequired

Customer contact details.

itemsarrayrequired

Ordered items.

deliveryobject

Delivery details for delivery orders.

paymentobjectrequired

Payment details.

chargesobjectrequired

Order totals. All values in cents (e.g. 3600 = $36.00).

timestampsobjectrequired

Order lifecycle timestamps, ISO 8601.

Responses

200OK

Order received and accepted for processing.

successboolean

Whether the order was received successfully.

400Bad Request

Missing or invalid fields in the order payload, including an invalid payment.method, a paid flag that does not match it, a cash order that is not allowed, or an order.type the store does not support. Do not retry - fix the payload. Status updates of an order vGrubs already received are never rejected for these reasons.

401Unauthorized

Invalid or missing x-api-key header.

Validation errors

A 400 caused by the payment fields or the order type carries one of these in message. Several payment problems are listed together, one per line. Cash orders are checked against the cash rules first, so a cash pickup order for a virtual store gets a cash error, not the order type one.

Message containsCause
payment.method: is required, one of card, online, cashpayment.method is missing or empty
payment.method: must be one of card, online, cash (received "...")payment.method has an unknown value
order.paid: must be false when payment.method is cashA cash order sent with paid: true
order.paid: must be true when payment.method is card (or online)A card or online order sent with paid: false
Cash orders are not enabled for this partner.Cash is not enabled for your account
Cash payment is allowed only for pickup orders.A cash order of type delivery
Cash payment is not allowed for store ID ...The store is not a physical location
Order type pickup is not supported for store ID ...A new prepaid pickup order for a virtual store (order.type not in supported_order_types)