{
  "slug": "payment-line-items-can-opt-out-of-strict-arithmetic-validation-per-request-83ebcc2b5ee7",
  "title": "Payment Line Items can opt out of strict arithmetic validation per request",
  "tools": [
    "stripe"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-01-28T00:00:00.000Z",
  "announced_at": "2026-01-28T00:00:00.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When Payment Line Item amounts can differ from the PaymentIntent total, set `amount_details.enforce_arithmetic_validation=false` on the create request. Read `amount_details.error` in the response; card payments with arithmetic errors omit line item data from card networks and do not qualify for L2/L3 interchange savings.",
    "examples": [
      "curl https://api.stripe.com/v1/payment_intents \\\n  -u \"<secret_key>:\" \\\n  -d amount=<amount_in_smallest_currency_unit> \\\n  -d currency=<three_letter_lowercase_currency> \\\n  -d \"amount_details[enforce_arithmetic_validation]\"=false \\\n  -d \"amount_details[line_items][0][<field>]\"=<value>"
    ],
    "gotchas": [
      "amount (required): Amount to collect, in the smallest currency unit.",
      "currency (required): Three-letter ISO currency code in lowercase.",
      "amount_details.enforce_arithmetic_validation: Set to `false` to let the request proceed when line item amounts do not match the total; per-request option.",
      "amount_details.error: Response field containing validation error details when arithmetic errors occur.",
      "amount_details.line_items: PaymentIntent line item details; use documented fields for the applicable payment integration.",
      "The opt-out is per request.",
      "For card payments, line item data with arithmetic errors is not sent to card networks, preventing the transaction from qualifying for L2/L3 interchange savings."
    ]
  },
  "why_it_matters": "When submitting a Payment Intent with Payment Line Items whose amounts may not match the total, set the per-request validation option and handle the returned errors.",
  "before": "By default, Stripe validates that Payment Line Items add up to the total; if they do not, it returns a 400 error.",
  "sources": [
    "https://docs.stripe.com/changelog/clover/2026-01-28/loosen-arithmetic-validation-for-payment-line-items",
    "https://docs.stripe.com/api/payment_intents/create?api-version=2026-01-28.clover",
    "https://docs.stripe.com/payments/payment-line-items"
  ],
  "rank": 0.97026,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "wave1b-tools-20261017",
    "verdict_id": "wave1b-tools-20261017:wave1b-tools-20261017-66513c80525b5a21-0:gate",
    "evidence_hash": "47f7ee27f3d31830256ec044a419fa140152b1b987b62d365f72c2acf1327fe7"
  },
  "review": {
    "draft_hash": "c428f4cabca254175a33b19a149c8689c6870f06d4a2e7a08a8419283ca3451b",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "wave1b-tools-20261017:gate",
    "reason": "3 of 3 judge runs approved with p_yes >= 0.9 (mean 0.97 >= 0.9; 2 needed) and Jev gave 0.66 (>= 0.6 needed)."
  }
}
