Replace the weekly opening hours
Partner key + restaurant key. Replaces the whole week with days (1–7 days, each weekday at most once; a weekday you leave out is closed). Times are HH:MM in Oslo time. closesAt before opensAt means open 00:00–closesAt and opensAt–24:00 on the same weekday, not a window into the next day.
Idempotent: the same week gives 200 without a change. The week has no updatedAt, so this takes no expectedUpdatedAt (it gives 422); two saves at the same time run one after the other and the last one wins. Overrides are not touched, and the opening hours step in the onboarding steps is not ticked off (the owner does that). Not allowed for an archived restaurant or the demo restaurant.
Authentication
The partner key (lbp_test_… or lbp_live_…), sent as Authorization: Bearer lbp_… and created in LettBestilt Partner under Partner key. It belongs to the whole partner, not to a restaurant, and only works against /api/v1/partner. Server to server only: a request with an Origin header is rejected with 403 FORBIDDEN, and the key must never be in a browser. A TEST key sees and creates only sandboxes; LIVE keys work once LettBestilt Partner is open. A suspended or archived partner, a revoked key and a restaurant key (lbs_…) here give 401 UNAUTHORIZED; an expired key gives 401 KEY_EXPIRED.
The restaurant’s own key (lbs_test_… or lbs_live_…) for calls about one restaurant in the partner API, sent together with the partner key. The key must have full access (scope *, otherwise 403 INSUFFICIENT_SCOPE), belong to a restaurant the partner owns and be in the same environment as the partner key. A restaurant that does not exist, belongs to another partner or does not match the key always gives the same 404 RESTAURANT_NOT_FOUND. Older keys without an environment in the prefix (lbs_<random>) are not accepted here; rotate them in LettBestilt Partner.
Path parameters
The restaurant’s slug. It must match the restaurant key in X-LettBestilt-Restaurant-Key.
Request
Response
The opening hours as they are now (the same shape as GET).

