Start form
Quote approval
Filled in by whoever starts the process
Customer & Sales package
Sales reps submit a quote; a discount authority table sets who approves, and each approver can approve, reject or counter before the CPQ is updated.
About this package
Quote approval with discount tiers enforces your discount authority without chasing approvals over chat. The sales rep fills in the start form: quote id, customer, product, annual list price, discount, term, payment terms and a justification.
The workflow works out the net annual price and the deal value over the term, then evaluates the Discount authority decision table. Up to 10% is approved automatically; above that the sales manager approves, above 20% the VP sales as well, and above 30% (or on very large deals) the deal desk and the CFO join. Approvals run in sequence, each with a one-day due date, a reminder and escalation, and each approver can approve (adjusting the approved discount), reject or make a counter-offer.
The final decision is written to the quote in your CPQ system and the rep gets an email: approved with the discount and conditions, rejected with the reason, or the counter-offer to take back to the customer. Adapt the thresholds, the approver chain and the CPQ call to your sales policy.
Starts from a form: the sales rep submits the quote details (Run dialog in the app, or a button in your CPQ posting to the start API).
Someone fills in a form to start it: the workflow inputs are the start form (Run dialog in the app, or your own portal posting to the API), and people complete User Task forms along the way.
The flow
Quote submitted
The start form collects the quote id, customer, product, list price, discount, term, payment terms and justification.
Price the deal
The net annual price and the deal value over the term are calculated.
Find the approval path
The Discount authority decision table returns which approvers are needed: none, sales manager, VP sales, deal desk and CFO.
Approve in sequence
Each required approver approves (and can lower the approved discount), rejects or makes a counter-offer.
Update the CPQ
The decision and approved discount are recorded on the quote in the CPQ system.
Tell the rep
The rep is emailed the approval, the rejection reason or the counter-offer.
Forms
The workflow inputs are the start form: the Run dialog renders them, and your own portal can post the same fields. User Tasks show their fields and outcome buttons to the assignee.
Start form
Filled in by whoever starts the process
User Task
Sales manager approval: {{customer}} {{quote_id}} at {{discount_pct}}%
User Task
VP sales approval: {{customer}} {{quote_id}} at {{discount_pct}}%
User Task
Deal desk approval: {{customer}} {{quote_id}} at {{discount_pct}}%
User Task
CFO approval: {{customer}} {{quote_id}} at {{discount_pct}}%
From your code
Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.
REST
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
-H "Authorization: Bearer $USERTASKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"workflow_id":"<workflow id>","variables":{"quote_id":"Q-2026-0457","customer":"Fourth Coffee","product":"Platform Professional","list_price":60000,"currency":"USD","discount_pct":18,"term_months":24,"payment_terms":"Annual in advance","justification":"Competitive evaluation against an incumbent; two-year commitment with annual prepayment.","rep_email":"sam.patel@example.com"}}'CLI
usertasks workflows inputs <workflow id> # the start form: keys, types, required
usertasks workflows run <workflow id> --input quote_id=Q-2026-0457 --input customer="Fourth Coffee" --input product="Platform Professional" --input list_price=60000 … --waitInbound webhook
usertasks webhooks create <workflow id> # prints the hook slug and secret once
curl -X POST "$USERTASKS_URL/api/webhooks/inbound?hook=<slug>" \
-H "Authorization: Bearer <webhook secret>" -H "Content-Type: application/json" \
-d '{"quote_id":"Q-2026-0457","customer":"Fourth Coffee","product":"Platform Professional","list_price":60000,"currency":"USD","discount_pct":18,"term_months":24,"payment_terms":"Annual in advance","justification":"Competitive evaluation against an incumbent; two-year commitment with annual prepayment.","rep_email":"sam.patel@example.com"}'What's included
| Type | Name | Details |
|---|---|---|
| Email template | Quote approved | Sent to the sales rep when the quote discount is approved. |
| Email template | Quote counter-offer | Sent to the sales rep when an approver proposes a different discount. |
| Email template | Quote rejected | Sent to the sales rep when an approver rejects the discount. |
| Integration | CPQ system | |
| API reference | Record quote approval | POST /quotes/{{quote_id}}/approval — Write the approval decision back to the quote in the CPQ system: approved (with the approved discount), rejected or counter-offer. |
| Decision table | Discount authority | 6 rules — Who has to approve a quote discount, by discount %, deal size and term. Approvals run in sequence: sales manager, VP sales, deal desk, CFO. First matching rule wins. |
| Workflow | Quote approval | 33 steps — A sales rep submits a quote; the discount authority table sets the approval path and each required approver (sales manager, VP sales, deal desk, CFO) approves, rejects or counters in turn. The decision is written to the CPQ system and the rep is emailed. |
Requirements
Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.
Integration “CPQ system”Required
Workflow “Quote approval” assigneesRequired
Install
Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.
curl -fLO https://usertasks.com/gallery/quote-approval-discount-tiers-1.0.0.utpkg
usertasks packages inspect quote-approval-discount-tiers-1.0.0.utpkg # offline: checksum, hashes, signature
usertasks packages install quote-approval-discount-tiers-1.0.0.utpkg --dry-run
usertasks packages install quote-approval-discount-tiers-1.0.0.utpkg # prompts for each requirement
usertasks packages install quote-approval-discount-tiers-1.0.0.utpkg --keep-incomplete --yes # in CI; finish with:
usertasks packages complete quote-approval-discount-tiers -f values.yamlVerify the download
shasum -a 256 quote-approval-discount-tiers-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.
Versions
Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work
More packages
Customer & Sales
Agents log a complaint; the customer tier and an SLA matrix set response and resolution targets, with escalation, compensation approval and CRM case resolution.
Needs:REST APIAssigneesEmail
Customer & Sales
Account managers register a new business customer; KYC screening, a credit report and a risk rating set the tier and limit before the account is opened.
Needs:REST APIAssigneesEmail
Customer & Sales
Enrich each inbound lead, score it with a routing table, create it in the CRM with its territory owner, and alert sales or start nurture.
Needs:REST APIInbound webhook