{
  "question": "What should happen when tax, tip or shipping pushes an AI agent's charge above the amount a human approved?",
  "slug": "how-to-handle-tax-tip-and-shipping-that-push-an-agent-charge-above-its-quote-bound-approval",
  "url": "https://www.rightshold.com/answers/how-to-handle-tax-tip-and-shipping-that-push-an-agent-charge-above-its-quote-bound-approval",
  "short_answer": "Decide the overage rule before the approval, and put it in what the human approves. A quote often isn't the final charge: tax and shipping are added at checkout from the address, restaurants and taxis add tips at capture, and card rules allow it. Stripe's overcapture table lets merchants capture more than authorized in some categories, for example up to 30% more for US restaurants on Visa and 15% for most other Visa categories. So choose one of two policies. Either the approval includes an explicit ceiling (quote plus a stated overage, such as 10% or a fixed amount for shipping), and anything up to the ceiling proceeds, or any amount above the quote needs a new approval. Never let the agent widen an approved amount on its own. On Rightshold, request_human_approval stores a hash of the exact action, so put quote_amount_minor and max_total_minor in it. If the final total is over the ceiling, the agent asks again with the new total; changing the approved action makes verify_human_approval report a mismatch. Rightshold doesn't compare the charge to the approval for you: your checkout step does that before it calls authorize_spend.",
  "checklist": [
    "Pick the overage policy per workflow: a pre-approved ceiling (quote plus a percent or a fixed amount) for routine buys, or hard re-approval for anything above the quote on high-value or one-off purchases.",
    "Have the agent get the full price before asking: item subtotal, tax, shipping, fees, and whether a tip or gratuity can be added later. If tax or shipping isn't known yet, it says so instead of guessing.",
    "Put the numbers in the approval action: quote_id, merchant, currency, quote_amount_minor, max_total_minor and the overage rule in words. request_human_approval hashes the canonical action, so the ceiling is part of what was approved.",
    "Show the approver the quote and the ceiling side by side (for example: quote 84.00 USD, approving up to 95.00 USD for tax and shipping), not one blended number.",
    "At checkout, compare the final total to max_total_minor in code. At or under: call authorize_spend with the final amount and the approval id in reference. Over: stop, and open a new request_human_approval with the new total.",
    "Set the agent's per_tx_max_minor (set_spend_policy) no lower than the approved ceiling, or authorize_spend will deny a charge the human approved; and no higher than you'd accept without a person looking.",
    "Set the card's per-authorization limit at the ceiling. On Stripe Issuing, captures for approved authorizations always succeed and over captures can't be blocked, so a tip added at capture shows up after the fact: catch it in reconciliation and dispute it if it wasn't legitimate.",
    "Reconcile each capture against the approved ceiling. A capture above max_total_minor is an exception to investigate, with the approval record as evidence."
  ],
  "sections": [
    {
      "heading": "Why the final charge differs from the quote",
      "points": [
        "Many carts are priced before tax and shipping are known, and the final total appears only after the address is entered. That's normal, but it means a yes for the subtotal doesn't cover the total.",
        "Some categories finalize later. Stripe Issuing's docs say businesses such as restaurants, vehicle rentals and ground transportation may authorize one amount and capture more, for example a restaurant capturing the bill plus tip. Stripe's merchant-side overcapture docs list card-brand limits by category: Visa allows +30% for US restaurants, +20% for restaurants elsewhere and +15% for most other categories on cardholder-initiated payments; American Express allows +30% for restaurants.",
        "Where Strong Customer Authentication applies, Stripe notes merchants generally need to authenticate and authorize the highest amount they expect to capture, so the authorization can be higher than the quote from the start."
      ]
    },
    {
      "heading": "Pre-approved overage vs hard re-approval",
      "points": [
        "A pre-approved overage is a ceiling the human agrees to up front: quote plus 10%, or quote plus a fixed 15.00 for shipping. It keeps routine purchases moving and is still bounded, because the ceiling is in the approved action.",
        "Hard re-approval means anything above the quote goes back to a person. Use it for large or unusual purchases, new merchants, or when the overage could hide a different item or a price change.",
        "Either way, the agent doesn't decide the overage. If its instructions say about 50 and it pays 58, the approval didn't cover 58. The rule has to be written before the yes, and the comparison has to run in code at checkout."
      ]
    },
    {
      "heading": "Don't widen the approved action, and what Rightshold doesn't do",
      "points": [
        "request_human_approval stores the SHA-256 of the canonical action plus a summary and an expiry. verify_human_approval with the action fails if any field changed, so the agent can't raise max_total_minor and reuse the old approval. A higher total needs a new request and a new decision.",
        "authorize_spend checks the final amount against the agent's spending policy (per-transaction and daily caps, merchant and category allowlists) and returns a signed allow or deny. Put the approval id in reference so the two records point at each other.",
        "Rightshold doesn't read carts, calculate tax or shipping, see card captures, or automatically compare authorize_spend amounts to an approval. Those checks run in your checkout step and in reconciliation; the Rightshold records show who approved which ceiling and what was authorized."
      ]
    }
  ],
  "checks": [],
  "ask_rightshold": {
    "start": "https://www.rightshold.com/start?ref=seo",
    "mcp_endpoint": "https://www.rightshold.com/mcp",
    "ask": "My agent has an 84.00 USD quote for office supplies before tax and shipping. Ask me to approve it with a ceiling of 95.00 USD, so a higher final total needs my approval again.",
    "mcp_call": {
      "tool": "request_human_approval",
      "arguments": {
        "summary": "Agent wants to buy office supplies: quote 84.00 USD, approve up to 95.00 USD including tax and shipping",
        "expires_in_minutes": 120,
        "action": {
          "type": "purchase",
          "quote_id": "q_…",
          "merchant_domain": "shop.example",
          "currency": "USD",
          "quote_amount_minor": 8400,
          "max_total_minor": 9500,
          "overage_rule": "tax and shipping up to the ceiling; anything above needs a new approval"
        }
      }
    },
    "also": [
      "Needs your API key, and only the owner's account key can decide the request. It returns an approval id and a one-time token for the owner.",
      "verify_human_approval is free: the checkout step sends the action and confirms it matches what was approved before paying.",
      "Then authorize_spend with the final amount (at or under max_total_minor) and the approval id in reference. Your checkout code does the comparison; Rightshold doesn't link the two automatically.",
      "ledger_verify is free and keyless for the approval, the decision and the spend receipt."
    ],
    "scope": "Rightshold records human approvals bound to a hash of the exact action and signs spend allow/deny decisions on a hash-chained ledger. It never holds, moves or settles money, doesn't calculate tax, shipping or tips, doesn't see card captures and doesn't compare a charge to an approval on its own. The overage check, card limits and reconciliation are steps you run. Not financial or tax advice."
  },
  "sources": [
    {
      "title": "Stripe Docs: Capture more than the authorized amount (overcapture limits by card brand and category; SCA)",
      "url": "https://docs.stripe.com/payments/overcapture?platform=web&ui=elements"
    },
    {
      "title": "Stripe Issuing: transactions (captures always succeed; over capture can't be blocked)",
      "url": "https://docs.stripe.com/issuing/purchases/transactions"
    },
    {
      "title": "Stripe Issuing: spending controls (tips and fees posted later can exceed a limit)",
      "url": "https://docs.stripe.com/issuing/controls/spending-controls"
    },
    {
      "title": "Human approvals on Rightshold",
      "url": "https://www.rightshold.com/human-approvals"
    },
    {
      "title": "Agent spending policies on Rightshold",
      "url": "https://www.rightshold.com/agent-spending-policies"
    }
  ],
  "related": [
    {
      "title": "How to require quote-bound approval before an agent payment settles",
      "url": "https://www.rightshold.com/answers/how-to-require-quote-bound-approval-before-an-agent-payment-settles"
    },
    {
      "title": "How to stop an AI agent from splitting a large purchase to dodge an approval threshold",
      "url": "https://www.rightshold.com/answers/how-to-stop-an-ai-agent-from-splitting-a-large-purchase-to-dodge-an-approval-threshold"
    },
    {
      "title": "How to require human approval before an AI agent spends money",
      "url": "https://www.rightshold.com/answers/how-to-require-human-approval-before-an-ai-agent-spends-money"
    },
    {
      "title": "How to reconcile an AI agent's spend against the bank feed at month end",
      "url": "https://www.rightshold.com/answers/how-to-reconcile-an-ai-agents-spend-against-the-bank-feed-at-month-end"
    }
  ],
  "computed_from": "Curated guidance; license verdicts computed from Rightshold's license profiles at render time. Not legal advice.",
  "updated": "2026-11-08"
}