Go-live checklist
Check these before real customers order
Work through this list with LettBestilt before you launch a restaurant’s site.
There is no sandbox and there are no test keys. Every order you create through the API is a real order for the restaurant. Plan your tests with the restaurant. Online orders that are never paid do not reach the kitchen, so you can test checkout up to the payment page without disturbing anyone.
Access
- The restaurant is live in LettBestilt. Until it is, every endpoint that takes a slug responds
404 RESTAURANT_NOT_FOUND, exceptGET /site-gate. - The API key is on your server only, in an environment variable. It is not in browser code, a mobile app or a repository.
- Every hostname is verified. Ask LettBestilt to verify each domain your site runs on, both
example.noandwww.example.noif you use both. Browser calls and payment return URLs only work from verifiedhttpsdomains. - All calls go to
https://www.lettbestilt.no/api/v1. The bare domain redirects, and the redirect drops theAuthorizationheader.
Checkout
- The UI follows
restaurant.capabilities. Pickup, delivery, reservations, online payment and cash are only offered when they aretrue. - Ordering is gated on
restaurant.openingHours, the kitchen’s hours, not onvenueHours. - “Ready in about X minutes” comes from
GET /prep-time, so rush mode shows. -
successUrlandcancelUrlare on a verified domain, andsuccessUrlcontains{TOKEN}. - Every checkout attempt has its own
Idempotency-Key, and retries reuse it. - You send
expectedTotaland handle409 PRICE_CHANGEDby showing the new total. - Your confirmation page checks
order.statuswithGET /orders/{token}, and does not treat the return tosuccessUrlas proof of payment. - Your site serves
/order/{publicToken}. LettBestilt’s order emails link to that path on the restaurant’s website domain. - Stock photos are labelled. When
product.imageIsStockistrue, show “Illustrasjonsfoto” next to the image.
Webhooks
- Your endpoint is public
httpsand registered with LettBestilt for the events you need. - The signature is verified over the raw body, and old timestamps are rejected. See Webhooks.
- You answer
2xxwithin 5 seconds and do slow work afterwards. - Duplicates are skipped using
X-LettBestilt-Delivery-Id.
Errors and limits
- You branch on
error.code, and showerror.messageto the customer where it makes sense. -
429waits forRetry-After, and network errors retry with the sameIdempotency-Key. - A
503on order creation lets the customer try again or choose cash. - The menu is cached on your side and fetched with
If-None-Match, so you do not refetch it for every page view. - You know your rate limits. Server-side calls share your server’s IP, which allows 10 orders per minute per restaurant. See rate limits.
Launch
- If the site uses a password gate during preview, it reads
GET /site-gatefrom the server, so LettBestilt can turn the gate off at launch without a redeploy. - One real order end to end: menu, cart, payment, confirmation page, status updates and webhooks, agreed with the restaurant.

