Skip to main content

Offers

A quote for a project. Offers are built from materials, services and costs, move through DRAFT → PUBLISHED → ACCEPTED/DECLINED, and can be created as a complete nested document or edited piece by piece.

📄️Change offer state

Transition an offer's state (e.g. publish or accept). The DB trigger materializes the published/accepted snapshot. Offers move DRAFT → PUBLISHED → ACCEPTED/DECLINED: a draft is published before it can be accepted or declined (409 `offer_not_published`), and once an offer left DRAFT it cannot go back to DRAFT (409 `offer_not_draft`) — create a new offer instead. An offer can be accepted until the end of its `validTo` day (German time); after that, accepting answers 409 `offer_expired` — publish a new offer instead. Accepting here takes the offer as it was offered: the recommended module variant of each roof, the offered battery, wallbox and emergency power, and no optional extras. An offer whose roof has several module variants and none marked as the offered one cannot be accepted here (409 `offer_selection_required`). A draft is checked before it is published: with its `validTo` day over (`valid_to_past`) or a price of zero or less (`price_not_positive`) publishing answers 409 `offer_not_publishable`, and the message names what stands in the way.