> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kordless.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Approve or correct a Quote

> Approve, adjust, or decline a Quote that has been held for owner review.

When a quote is held for owner review, the quote receipt shows an approval panel with three actions. The owner approves the computed range, adjusts it, or declines — and the decision is recorded in the review and override trail.

## Before you start

* A workspace with an active Test or Live environment
* A quote in the **awaiting approval** state (the work list shows it in the **Needs review** bucket)
* Access to approve quotes for this workspace

## When the approval panel appears

The approval panel appears on the quote receipt when the quote state is **awaiting approval**. This happens when:

* The book's autonomy rung is **approval-first** and the Book produced a priced offer.
* A review rule fired and held the result regardless of the autonomy rung.
* The outcome was **needs review** or **inspection required** — non-priced outcomes are always held.

<Note>
  In Shadow mode, no approval panel appears. Shadow observes requests for comparison but never sends an offer. The owner still produces the real answer outside Kordless.
</Note>

## The three actions

### Approve and send

Click **Approve & send** to send the computed range or exact price to the customer as-is. The quote state moves from `awaiting_approval` to `quoted`. The customer sees the offer on the hosted path or embed.

The review record stores who approved and when. No adjustment is recorded.

### Adjust

Click **Adjust** to correct the range before sending. An inline form appears with:

* **Low (\$)** — The corrected low bound.
* **High (\$)** — The corrected high bound.
* **Classification** — Why the adjustment is being made.
* **Reason** — An explanation of the correction.

The classification options are:

| Classification         | When to use it                                                                | Reason required? |
| ---------------------- | ----------------------------------------------------------------------------- | ---------------- |
| One-time exception     | The Book's price was right but this customer needs a different number         | No               |
| Existing rule wrong    | A rule in the Book produced the wrong price and should be fixed               | Yes              |
| Missing rule or factor | The Book is missing a rule or factor that would have produced the right price | Yes              |

When the classification is **existing rule wrong** or **missing rule or factor**, Kordless drafts a learning proposal against the pinned book version. This proposal appears as a pending change on the Book — it does not write to Live directly. The reason you provide becomes the owner evidence for that proposal.

<Warning>
  An adjustment that classifies as an existing rule problem or a missing rule drafts a proposed change against the pinned book version. That proposal must still be reviewed, verified, and published before it becomes Live. See [Update a Live Book](/product/book/update-live-book).
</Warning>

After saving, the quote state moves to `quoted` with the adjusted range. The review record stores the original range, the adjusted range, the classification, and the reason.

### Decline

Click **Decline** to close the quote without sending an offer. An optional reason can be provided. The quote state moves to `declined`. The customer sees a neutral state — no price is ever shown for a declined quote.

## What happens after a decision

After any decision, the quote receipt refreshes to show:

* The updated outcome chip (priced, declined, or still in review if the action failed).
* The complete review and override record — who decided, what was adjusted, and why.
* The customer decision state.

If the quote was approved or adjusted, the customer decision becomes **sent**. If declined, it becomes **declined**.

## Idempotency

The decision route uses optimistic concurrency with the quote's row version. If another action was taken on the same quote between when you opened the receipt and when you submitted your decision, the server rejects the stale request. Refresh the page to see the current state and try again.

## Role requirements

Approving, adjusting, and declining quotes requires authorization to record quote decisions. Members can view the quote receipt but may not see the approval panel. If you do not have the required role, ask a workspace administrator to complete this step or grant you the necessary role.

## If it does not work

<Accordion>
  <AccordionItem title="Enter a valid range">
    When adjusting, the high bound must be greater than or equal to the low bound. If you see "Enter a valid range (high ≥ low)," correct the values and try again.
  </AccordionItem>

  <AccordionItem title="Reason is required">
    When the classification is "Existing rule wrong" or "Missing rule or factor," a reason is required. Provide an explanation so the drafted proposal has owner evidence.
  </AccordionItem>

  <AccordionItem title="Decision could not be recorded">
    If the server rejects the decision, the quote may have been updated by another action. Refresh the page to get the latest state and try again.
  </AccordionItem>

  <AccordionItem title="Permission-limited member">
    If you do not see the approval panel on a held quote, you may not have the role required to record decisions. Ask a workspace administrator to complete this step.
  </AccordionItem>
</Accordion>

## Next

<CardGroup cols={2}>
  <Card title="Quote receipt and derivation" icon="receipt" href="/product/quotes/quote-receipt-and-derivation">
    Why a quote result can be replayed and how it is derived.
  </Card>

  <Card title="Commitments overview" icon="handshake" href="/product/commitments/overview">
    What happens when a customer accepts an offer.
  </Card>
</CardGroup>
