🧩 For Agencies & Developers

Build restaurant websites
that order straight into the POS.

The Billzova API gives your restaurant clients a live menu, correctly priced carts with Indian GST, pickup and delivery orders and table bookings — landing in their Billzova POS the second the customer taps Place order. No tablets, no emails, no re-typing.

💸₹11Per day (yearly)
📅₹399Per month
📡100%Offline ready
🎁Free1-month trial
developers.billzova.com — Website ordering guide
Billzova developers portal showing the website ordering guide: open/closed, menu, quote, order and status

The struggle

Sound familiar?

📧

Orders that end in an inbox

Most restaurant websites send orders by email or WhatsApp. Someone has to notice, re-type it into billing and call the customer back. Orders get missed.

🧮

Prices that never match the bill

Menus copied into a website drift from the POS. GST, packing charges and rounding are guessed in JavaScript, and the customer is charged a different amount at the counter.

🔧

Integrations that break quietly

Unversioned APIs change under you, retries create duplicate orders, and error messages in prose are impossible to handle properly in code.

Who it is for

For the people who build restaurant websites in India

Most restaurant websites in India are built by small web agencies, freelancers, or a nephew who is good with WordPress. They look great — and then the “Order now” button sends an email, or opens WhatsApp, or links out to a delivery app that takes a commission on every order.

The Billzova API exists so that the website you build can do the real thing: take an order that the restaurant's staff see on their POS screen, with the right prices, the right GST, and the customer's name, number and address already filled in. It is a plain REST API with JSON in and out, so it works with whatever you already build in:

  • Next.js, Nuxt, Astro or Remix — call it from a route handler or server action.
  • WordPress or PHP — call it from a small server-side endpoint with cURL.
  • Node.js, Python, Go, Laravel — any language that can send an HTTPS request.
  • Flutter or React Native apps — through your own backend, which holds the key.

If your client already uses Billzova for billing, connecting their website is usually a small job, not a project. If they do not yet, Billzova POS starts with a free trial — and you get a client whose website and counter finally agree.

What is in it

Twelve endpoints that cover a restaurant website

Deliberately small. Everything a restaurant's own website or app needs for menu, ordering and booking — and nothing that would let a website change the restaurant's menu, prices or reports.

Billzova Public API endpoints
MethodPathWhat it does
GET/v1/restaurantName, address, opening hours, open/closed right now, and whether ordering and booking are on.
GET/v1/menuLive categories, items, sizes and add-ons with availability. Supports ETag / If-None-Match caching.
POST/v1/orders/quotePrice a cart with the restaurant's own GST, charges and rounding. Show these totals — never your own maths.
POST/v1/ordersPlace a pickup or delivery order into the POS. Needs an Idempotency-Key.
GET/v1/orders/{id}Status, timeline, rider name and number once out for delivery, and rejection reason if any.
GET/v1/ordersList orders, with updated_since for syncing changes in order.
POST/v1/orders/{id}/cancelCustomer cancels while the order is still waiting for the restaurant.
GET/v1/reservations/availabilityFree booking times for a date and party size, from opening hours and the restaurant's limits.
POST/v1/reservationsBook a table. Needs an Idempotency-Key.
GET/v1/reservations/{id}Booking status, price, and decline reason if any.
POST/v1/reservations/{id}/cancelCustomer cancels before the restaurant's cut-off.
GET/v1/track/{token}Public tracking data for an order or booking — no key needed.

Full details for each — fields, errors, examples — are in the API reference.

The flow

A website order in five calls

This is the same flow Billzova's own restaurant websites use. The website ordering guide has the code.

  1. 1

    Show open or closed

    GET /v1/restaurant on page load. If the restaurant is not accepting orders — outside opening hours, switched off, or (if the owner chose it) no staff device online — show the label it gives you, such as "Closed · opens 11:00 AM", and hide checkout.

  2. 2

    Render the menu

    GET /v1/menu, cached with ETag. Let customers pick sizes and add-ons within each group's limits, and grey out anything marked unavailable.

  3. 3

    Quote the cart

    POST /v1/orders/quote returns lines, GST, charges and the total, computed by the same engine that prints the restaurant's bills. Show these numbers as they are.

  4. 4

    Place the order

    POST /v1/orders with the customer's name and phone, the payment mode, an Idempotency-Key, and expectedTotal from the quote. If prices changed in between, you get PRICE_CHANGED with a fresh quote instead of a surprise at the counter.

  5. 5

    Show status

    Poll GET /v1/orders/{id} every 10–20 seconds until it is completed, rejected or cancelled. When the restaurant sends it out, the response includes the rider's name and number.

Table booking follows the same pattern: check availability for a date and party size, show the free times, book with an Idempotency-Key, and poll for confirmation. The restaurant's staff confirm or decline in their POS — see how that looks on our online table booking page.

Built not to break

Designed so the websites you ship keep working

You will build a site, hand it over and move on to the next client. The API is designed around that reality.

A dated version contract. Every key is pinned to the API version it was created with (currently 2026-10-17). Inside a version, changes are additive only — new fields, new enum values — so a site you shipped this year keeps working next year. You can ask for a version explicitly with the Billzova-Version header. See versioning & compatibility.

Safe retries. Orders and bookings need an Idempotency-Key. A retry with the same key returns the first result instead of placing a second order; if the first request is still being processed, you get IDEMPOTENCY_IN_PROGRESS and simply retry a few seconds later. A customer on patchy 4G never sends the kitchen two orders.

Errors you can branch on. Every error has a stable code such as ITEM_UNAVAILABLE, CLOSED or PRICE_CHANGED, a human message you can show the customer, the field it relates to, a request ID and a link to its documentation.

Money you cannot get wrong. Amounts come as an object with the value in paise, the currency and a ready-formatted display string like “₹1,194.00”. Show the display string and you will never have a rounding argument with a customer.

Test mode that is honest. A test key uses the real menu and the real pricing engine, but test orders and bookings never reach the POS, printer or WhatsApp — so you can demo the whole flow to your client without the kitchen cooking anything.

Billzova dashboard showing an API key pinned to version 2026-10-17 and a log of recent API requests with status codes
The owner sees each key's version and every request — useful when you are debugging together.

Handing over

A go-live checklist for restaurant website projects

Most problems on launch day are not code problems — they are restaurant settings nobody checked. Run through this list with the owner before you switch to the live key:

  1. Opening hours are right, including weekly offs and the next holiday. The API refuses orders when the restaurant is closed, and your site should show the closed label it returns.
  2. The menu in Billzova is the menu on the website. Photos and descriptions can be yours, but items, sizes, add-ons and prices must come from the API. Ask the owner to mark sold-out items unavailable in the POS, not to email you.
  3. Online order settings are filled in — pickup and/or delivery, delivery pincodes, minimum order, preparation time and the reminder and auto-cancel times.
  4. Someone is there to accept orders. Orders placed while nobody is logged in still arrive with email and WhatsApp alerts, and are cancelled (customer told) if nobody accepts them in time. Owners can also choose to take orders only while a staff device is online — then the API refuses orders when nobody has been active for a while. Tell the owner which setting they picked; it is the most common “the website is broken” call.
  5. Do a full test with the test key — menu, quote, order, booking — then one real order with the live key that the staff accept, cook and bill, so everyone has seen it once.
  6. Store the key on your server only, limit its scopes to what the site uses, and add your server's IP to the allowlist if it is fixed.
  7. Keep the request ID. Every response carries an X-Request-Id. Log it with errors, and quote it when you or the owner contact support.

The getting started guide covers the first request in a few lines of cURL, and the table booking guide covers bookings the same way.

Before you quote a client

What the API does not do yet

We would rather you know this before you promise anything to a restaurant. Each item below is on our list, but none of it works today:

  • No online payments yet. Orders are pay at counter or cash on delivery; booking amounts are collected at the restaurant.
  • No webhooks yet. Poll order and booking status, or use the tracking link.
  • No browser keys yet. Keys are secret and must stay on your server.
  • No partner (OAuth) apps yet. Each restaurant creates its own key for you.
  • No delivery-app connection. The API is for the restaurant's own website and app, not for importing orders from food-delivery apps.

Webhooks, server-side offers and coupons, online payments, partner apps and publishable keys are listed as coming next in the changelog. When they ship, they arrive as additions — nothing you build today needs to change.

Questions, or want to tell us what your clients need first? Use the developer support page or contact us.

Restaurant-controlled keys

The restaurant creates the key — and can see every request

Your client creates a live or test key in their dashboard, limits it to the scopes you need and, if you like, to your server's IP address. Every request shows up in their request log with the result, time and request ID, so support conversations start from facts.

  • Live and test keys
  • Scopes: restaurant, menu, orders, reservations — read or write
  • Optional IP allowlist
  • Instant revoke, request log with IDs
Billzova dashboard Developers settings with an API key, its API version, and a log of recent API requests
Documented properly

Every endpoint with fields, limits, errors and copy-paste code

The reference lists each field with its type and limits, the scope and rate limit for each endpoint, every error code, and cURL and Node.js examples. Guides walk through website ordering and table booking end to end.

  • Field-by-field reference
  • cURL and Node.js examples
  • Website ordering and booking guides
  • Searchable, light and dark
Billzova API reference page for placing an order, with scope, rate limit, idempotency and body fields

In the product

What your client's staff see

Orders and bookings from your website land in the same screens they already use.

An order placed through the Billzova API arriving in the POS website-orders inbox
Your order, in their POS
Bookings placed through the Billzova API in the POS reservations list
Your bookings, in their reservations
Kasoota Cafe and Bistro website built by Billzova
A website we built

Compared

A typical restaurant website integration vs the Billzova API

Email / WhatsApp / spreadsheet integrations

  • Menu copied by hand, goes stale
  • Totals calculated in the browser
  • Orders re-typed into billing
  • Retries create duplicate orders
  • No way for the owner to see what was sent

Billzova API

  • Live menu and availability from the POS
  • Server-side quote with the restaurant's GST and charges
  • Orders and bookings straight into the POS
  • Idempotency keys make retries safe
  • Request log in the owner's dashboard

FAQ

Billzova API — questions developers ask

What can I build with the Billzova API?▾
A restaurant's own website or app that shows the live menu and open/closed status, prices a cart with the restaurant's real GST and charges, places pickup and delivery orders, shows free table-booking times and books tables — all landing directly in the restaurant's Billzova POS.
Who gives me an API key?▾
The restaurant. The owner or a manager creates a key in their Billzova dashboard under Settings → Developers and shares it with you. Each key can be limited to certain scopes and IP addresses, and revoked instantly.
Can I test without sending orders to the kitchen?▾
Yes. A test key (bz_test_sk_…) reads the real menu and prices carts with the real engine, and runs every validation — but orders and bookings placed with it are stored separately and never reach the POS, the printer or WhatsApp.
Is the API safe to call from the browser?▾
No — keys are secret and belong on your server. Call the API from your backend (for example a Next.js route handler or an Express endpoint) and let the browser talk to your server. Browser-safe publishable keys are on the roadmap, not available yet.
What happens if my request times out and I retry?▾
Creating orders and bookings needs an Idempotency-Key header. Retrying with the same key returns the original result instead of creating a duplicate, so a flaky mobile connection never sends the kitchen two orders. A retry that arrives while the first request is still running gets IDEMPOTENCY_IN_PROGRESS — wait a moment and retry.
Will my integration break when you change the API?▾
The API is versioned by date. Each key is pinned to the version it was created with, you can ask for a version explicitly with the Billzova-Version header, and changes inside a version are only additive — new fields and new enum values, never removals.
Are there webhooks?▾
Not yet. Today you poll an order (every 10–20 seconds is fine) or send the customer the tracking link. Webhooks are next on the roadmap and listed in the changelog.
Can customers pay online through the API?▾
Not yet. Orders use pay at counter or cash on delivery, and booking amounts are collected at the restaurant. Online payments are on the roadmap.
Does the restaurant pay commission on API orders?▾
No. Orders placed through the API are the restaurant's own orders with 0% commission, billed and reported in Billzova like any other sale.
What are the rate limits?▾
Reads 600 per minute per key, quotes 120 per minute, creates and cancels 30 per minute, plus 5 orders per customer phone per 10 minutes and 3 bookings per customer phone per day to stop abuse.
Can Billzova build the website instead?▾
Yes. If you are a restaurant owner without a developer, Billzova builds restaurant websites with ordering and booking already connected — see our website plans.
🚀 Start your 30-day free trial

Your clients' websites, connected to their kitchen.

Docs, a full API reference and a step-by-step ordering guide are free to read at developers.billzova.com.