Free full tool

commerce.price-components

Reconcile item, discount, shipping, tax and fee amounts using exact decimals; missing costs stay unknown and declared totals can be checked.

Run a task for free

This starter input is synthetic. Replace it with your own public or sanitized input. It sends one request when you press Run.

Inspect the API contract

Read this tool’s schema and execution URL as JSON · Read a fixed input/output example

Use HTTP or MCP

POST https://agent-utilities.agent-utilities.workers.dev/v1/tools/commerce.price-components
Content-Type: application/json

{
  "currency": "USD",
  "minorUnitDigits": 2,
  "items": [
    {
      "id": "1kg-bag",
      "unitPrice": "16.49",
      "quantity": 2,
      "discount": "0.00"
    }
  ],
  "orderDiscount": "2.00",
  "shipping": "4.99",
  "tax": null,
  "fees": "0.00"
}

No key or payment. Hosted MCP full tool: commerce_price_components, arguments:

{
  "input": {
    "currency": "USD",
    "minorUnitDigits": 2,
    "items": [
      {
        "id": "1kg-bag",
        "unitPrice": "16.49",
        "quantity": 2,
        "discount": "0.00"
      }
    ],
    "orderDiscount": "2.00",
    "shipping": "4.99",
    "tax": null,
    "fees": "0.00"
  }
}

Input schema

{
  "type": "object",
  "properties": {
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$"
    },
    "minorUnitDigits": {
      "type": "integer",
      "minimum": 0,
      "maximum": 6
    },
    "items": {
      "type": "array",
      "minItems": 1,
      "maxItems": 100,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "unitPrice": {
            "type": "string",
            "pattern": "^(0|[1-9]\\d{0,11})(\\.\\d{1,6})?$",
            "maxLength": 19
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100000
          },
          "discount": {
            "type": "string",
            "pattern": "^(0|[1-9]\\d{0,11})(\\.\\d{1,6})?$",
            "maxLength": 19
          }
        },
        "required": [
          "id",
          "unitPrice",
          "quantity",
          "discount"
        ],
        "additionalProperties": false
      }
    },
    "orderDiscount": {
      "type": "string",
      "pattern": "^(0|[1-9]\\d{0,11})(\\.\\d{1,6})?$",
      "maxLength": 19
    },
    "shipping": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^(0|[1-9]\\d{0,11})(\\.\\d{1,6})?$",
          "maxLength": 19
        },
        {
          "type": "null"
        }
      ]
    },
    "tax": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^(0|[1-9]\\d{0,11})(\\.\\d{1,6})?$",
          "maxLength": 19
        },
        {
          "type": "null"
        }
      ]
    },
    "fees": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^(0|[1-9]\\d{0,11})(\\.\\d{1,6})?$",
          "maxLength": 19
        },
        {
          "type": "null"
        }
      ]
    },
    "declaredTotal": {
      "type": "string",
      "pattern": "^(0|[1-9]\\d{0,11})(\\.\\d{1,6})?$",
      "maxLength": 19
    }
  },
  "required": [
    "currency",
    "minorUnitDigits",
    "items",
    "orderDiscount",
    "shipping",
    "tax",
    "fees"
  ],
  "additionalProperties": false
}

Output schema

{
  "type": "object",
  "properties": {
    "currency": {
      "type": "string"
    },
    "minorUnitDigits": {
      "type": "number"
    },
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "subtotal": {
            "type": "string"
          },
          "discount": {
            "type": "string"
          },
          "total": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "subtotal",
          "discount",
          "total"
        ],
        "additionalProperties": false
      }
    },
    "itemSubtotal": {
      "type": "string"
    },
    "lineDiscounts": {
      "type": "string"
    },
    "orderDiscount": {
      "type": "string"
    },
    "knownTotal": {
      "type": "string"
    },
    "total": {
      "type": [
        "string",
        "null"
      ]
    },
    "missingComponents": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "matchesDeclaredTotal": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "difference": {
      "type": [
        "string",
        "null"
      ]
    },
    "scope": {
      "type": "string"
    }
  },
  "required": [
    "currency",
    "minorUnitDigits",
    "lines",
    "itemSubtotal",
    "lineDiscounts",
    "orderDiscount",
    "knownTotal",
    "total",
    "missingComponents",
    "matchesDeclaredTotal",
    "difference",
    "scope"
  ],
  "additionalProperties": false
}

Input ≤128 KiB; output ≤64 KiB. Schema limits may be smaller. Network sources retain their access and upstream limits. Free results are not stored for recovery.

Free access, with clear limits

All available hosted tools are free during validation. Existing input, output and source-access limits apply. Full tools and the combined report share capacity limits that count attempts, including failed executions and marked checks; they are not per-user allowances. No account, API key, wallet or funding is needed. Existing credit balances are preserved. Live Reddit remains unavailable until configured. Paid billing will not resume automatically.

Hosted full executions share 1,000 attempts per UTC day and 60 per minute. Local browser audits and comparisons do not consume that hosted allowance. Bounded previews retain their own limits. Results can omit content; inspect source attribution, missing values and truncation. Byte reduction is not measured model-token or dollar savings.

Try a real task, then tell agentutilities@proton.me whether it helped. Omit credentials and private records. Feedback is optional.