Skip to main content
Glama

Start checkout

start_checkout
Read-onlyIdempotent

Returns a hosted checkout_url for an exact product and selected fulfillment mode using the delivery ZIP or address. For several products, pass items instead of product_id: one checkout_url puts them all in one basket. JENNi selects the source internally. The buyer reviews delivery, tax and the total, enters payment details, and places the order on the hosted page. This read-only tool creates no order, reservation or charge. The final checkout page verifies current price and availability.

Input Schema

NameRequiredDescriptionDefault
zipNo5-digit US delivery ZIP code, when no delivery_address is given.
itemsNoSeveral products in one link, instead of product_id. Same fulfillment_mode and ZIP for all.
quantityNoHow many of product_id (default 1).
product_idNoThe exact item: a variant's product_id when it has variants.
delivery_addressNoDelivery destination. Address details are not placed in the checkout URL.
fulfillment_modeYesSelected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by).

Output Schema

NameRequiredDescriptionDefault
itemNo
itemsNo
pricingNounit_price x quantity + fee = total_before_tax. Sales tax is added at checkout.
quantityNo
next_stepYes
product_idNo
unit_priceNo
reason_codeNoMachine-readable reason, alongside the prose note.
checkout_urlYes
delivery_promiseNoLocal delivery: "Get it today" or "We'll deliver by <Month D>".
fulfillment_modeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / fulfillment_mode / description
      Previous value: -"Selected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by); ship_to_home ships to the delivery address."New value: +"Selected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by)."
    • changedInput schema / properties / fulfillment_mode / enum
      Previous value: -[
      -  "local_delivery",
      -  "ship_to_home"
      -]New value: +[
      +  "local_delivery"
      +]
    • changedOutput schema / properties / delivery_promise / description
      Previous value: -"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"."New value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\"."
    • changedOutput schema / properties / fulfillment_mode / enum
      Previous value: -[
      -  "local_delivery",
      -  "ship_to_home"
      -]New value: +[
      +  "local_delivery"
      +]
    • changedOutput schema / properties / pricing / properties / fee / description
      Previous value: -"Local delivery fee or flat shipping."New value: +"Local delivery fee."
  2. Changed5 schema fields changed
    • addedInput schema / properties / items
      Added value: +{
      +  "description": "Several products in one link, instead of product_id. Same fulfillment_mode and ZIP for all.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "product_id": {
      +        "description": "The exact item: a variant's product_id when it has variants.",
      +        "type": "string"
      +      },
      +      "quantity": {
      +        "description": "How many (default 1).",
      +        "maximum": 10000,
      +        "minimum": 1,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "product_id"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 8,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / quantity
      Added value: +{
      +  "description": "How many of product_id (default 1).",
      +  "maximum": 10000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / zip
      Added value: +{
      +  "description": "5-digit US delivery ZIP code, when no delivery_address is given.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "product_id",
      -  "fulfillment_mode",
      -  "delivery_address"
      -]New value: +[
      +  "fulfillment_mode"
      +]
    • addedOutput schema / properties / items
      Added value: +{
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed30 schema fields changed
    • addedOutput schema / properties / delivery_promise / description
      Added value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"."
    • changedOutput schema / properties / delivery_promise / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / fulfilled_by
      Removed value: -{
      -  "const": "Delivered by JENNi",
      -  "type": "string"
      -}
    • removedOutput schema / properties / kind
      Removed value: -{
      -  "enum": [
      -    "basket"
      -  ],
      -  "type": "string"
      -}
    • changedOutput schema / properties / pricing / description
      Previous value: -"The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total_before_tax (sales tax is added at checkout). Null when the price could not be read; reason_code says why."New value: +"unit_price x quantity + fee = total_before_tax. Sales tax is added at checkout."
    • removedOutput schema / properties / pricing / properties / currency
      Removed value: -{
      -  "const": "USD",
      -  "type": "string"
      -}
    • removedOutput schema / properties / pricing / properties / eta / description
      Removed value: -"Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim)."
    • removedOutput schema / properties / pricing / properties / eta / properties / deliver_by_text
      Removed value: -{
      -  "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
      -  "type": "string"
      -}
    • changedOutput schema / properties / pricing / properties / eta / properties / earliest_date / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / pricing / properties / eta / properties / kind
      Removed value: -{
      -  "enum": [
      -    "same_day",
      -    "window"
      -  ],
      -  "type": "string"
      -}
    • changedOutput schema / properties / pricing / properties / eta / properties / latest_date / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / properties / pricing / properties / eta / type
      Previous value: -[
      -  "object",
      -  "null"
      -]New value: +"object"
    • addedOutput schema / properties / pricing / properties / fee / description
      Added value: +"Local delivery fee or flat shipping."
    • changedOutput schema / properties / pricing / properties / fee / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / pricing / properties / fee_cents
      Removed value: -{
      -  "type": [
      -    "integer",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / pricing / properties / fee_kind
      Removed value: -{
      -  "enum": [
      -    "local_delivery_fee",
      -    "shipping"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / pricing / properties / fulfilled_by
      Removed value: -{
      -  "const": "Delivered by JENNi",
      -  "type": "string"
      -}
    • removedOutput schema / properties / pricing / properties / fulfillment_mode
      Removed value: -{
      -  "enum": [
      -    "local_delivery",
      -    "ship_to_home"
      -  ],
      -  "type": "string"
      -}
    • addedOutput schema / properties / pricing / properties / reason_code / description
      Added value: +"Machine-readable reason, alongside the prose note."
    • addedOutput schema / properties / pricing / properties / subtotal / description
      Added value: +"unit_price x quantity, when quantity > 1."
    • removedOutput schema / properties / pricing / properties / subtotal_cents
      Removed value: -{
      -  "type": "integer"
      -}
    • removedOutput schema / properties / pricing / properties / tax
      Removed value: -{
      -  "const": "added_at_checkout",
      -  "type": "string"
      -}
    • removedOutput schema / properties / pricing / properties / total_before_tax / description
      Removed value: -"subtotal + fee before tax; null when the fee could not be read."
    • changedOutput schema / properties / pricing / properties / total_before_tax / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • removedOutput schema / properties / pricing / properties / total_before_tax_cents
      Removed value: -{
      -  "type": [
      -    "integer",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / pricing / properties / unit_price_cents
      Removed value: -{
      -  "type": "integer"
      -}
    • changedOutput schema / properties / pricing / type
      Previous value: -[
      -  "object",
      -  "null"
      -]New value: +"object"
    • removedOutput schema / properties / unit_price / description
      Removed value: -"The unit price the page shows; null when it could not be read (reason_code says why)."
    • changedOutput schema / properties / unit_price / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"string"
    • changedOutput schema / required
      Previous value: -[
      -  "kind",
      -  "checkout_url",
      -  "next_step"
      -]New value: +[
      +  "checkout_url",
      +  "next_step"
      +]
  4. Changed3 schema fields changed
    • addedOutput schema / properties / pricing
      Added value: +{
      +  "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total_before_tax (sales tax is added at checkout). Null when the price could not be read; reason_code says why.",
      +  "properties": {
      +    "currency": {
      +      "const": "USD",
      +      "type": "string"
      +    },
      +    "eta": {
      +      "description": "Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim).",
      +      "properties": {
      +        "deliver_by_text": {
      +          "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
      +          "type": "string"
      +        },
      +        "earliest_date": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "kind": {
      +          "enum": [
      +            "same_day",
      +            "window"
      +          ],
      +          "type": "string"
      +        },
      +        "latest_date": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "fee": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "fee_cents": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "fee_kind": {
      +      "enum": [
      +        "local_delivery_fee",
      +        "shipping"
      +      ],
      +      "type": "string"
      +    },
      +    "fulfilled_by": {
      +      "const": "Delivered by JENNi",
      +      "type": "string"
      +    },
      +    "fulfillment_mode": {
      +      "enum": [
      +        "local_delivery",
      +        "ship_to_home"
      +      ],
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "quantity": {
      +      "type": "integer"
      +    },
      +    "reason_code": {
      +      "enum": [
      +        "no_price",
      +        "no_live_offer",
      +        "out_of_stock",
      +        "not_served_locally",
      +        "variant_required",
      +        "product_not_found",
      +        "invalid_input",
      +        "fee_unavailable",
      +        "price_unavailable",
      +        "catalog_unavailable",
      +        "rate_limited",
      +        "not_checked",
      +        "no_buyable_offer"
      +      ],
      +      "type": "string"
      +    },
      +    "subtotal": {
      +      "type": "string"
      +    },
      +    "subtotal_cents": {
      +      "type": "integer"
      +    },
      +    "tax": {
      +      "const": "added_at_checkout",
      +      "type": "string"
      +    },
      +    "total_before_tax": {
      +      "description": "subtotal + fee before tax; null when the fee could not be read.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total_before_tax_cents": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "unit_price": {
      +      "type": "string"
      +    },
      +    "unit_price_cents": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / quote
      Removed value: -{
      -  "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total (before sales tax, which checkout adds). Null when the price could not be read; reason_code says why.",
      -  "properties": {
      -    "currency": {
      -      "const": "USD",
      -      "type": "string"
      -    },
      -    "eta": {
      -      "description": "Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim).",
      -      "properties": {
      -        "deliver_by_text": {
      -          "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
      -          "type": "string"
      -        },
      -        "earliest_date": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "kind": {
      -          "enum": [
      -            "same_day",
      -            "window"
      -          ],
      -          "type": "string"
      -        },
      -        "latest_date": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "type": [
      -        "object",
      -        "null"
      -      ]
      -    },
      -    "fee": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "fee_cents": {
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    },
      -    "fee_kind": {
      -      "enum": [
      -        "local_delivery_fee",
      -        "shipping"
      -      ],
      -      "type": "string"
      -    },
      -    "fulfilled_by": {
      -      "const": "Delivered by JENNi",
      -      "type": "string"
      -    },
      -    "fulfillment_mode": {
      -      "enum": [
      -        "local_delivery",
      -        "ship_to_home"
      -      ],
      -      "type": "string"
      -    },
      -    "note": {
      -      "type": "string"
      -    },
      -    "quantity": {
      -      "type": "integer"
      -    },
      -    "reason_code": {
      -      "enum": [
      -        "no_price",
      -        "no_live_offer",
      -        "out_of_stock",
      -        "not_served_locally",
      -        "variant_required",
      -        "product_not_found",
      -        "invalid_input",
      -        "fee_unavailable",
      -        "quote_unavailable",
      -        "catalog_unavailable",
      -        "rate_limited",
      -        "not_checked",
      -        "no_buyable_offer"
      -      ],
      -      "type": "string"
      -    },
      -    "subtotal": {
      -      "type": "string"
      -    },
      -    "subtotal_cents": {
      -      "type": "integer"
      -    },
      -    "tax": {
      -      "const": "added_at_checkout",
      -      "type": "string"
      -    },
      -    "total": {
      -      "description": "subtotal + fee before tax; null when the fee could not be read.",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "total_cents": {
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    },
      -    "unit_price": {
      -      "type": "string"
      -    },
      -    "unit_price_cents": {
      -      "type": "integer"
      -    }
      -  },
      -  "type": [
      -    "object",
      -    "null"
      -  ]
      -}
    • changedOutput schema / properties / reason_code / enum
      Previous value: -[
      -  "no_price",
      -  "no_live_offer",
      -  "out_of_stock",
      -  "not_served_locally",
      -  "variant_required",
      -  "product_not_found",
      -  "invalid_input",
      -  "fee_unavailable",
      -  "quote_unavailable",
      -  "catalog_unavailable",
      -  "rate_limited",
      -  "not_checked",
      -  "no_buyable_offer"
      -]New value: +[
      +  "no_price",
      +  "no_live_offer",
      +  "out_of_stock",
      +  "not_served_locally",
      +  "variant_required",
      +  "product_not_found",
      +  "invalid_input",
      +  "fee_unavailable",
      +  "price_unavailable",
      +  "catalog_unavailable",
      +  "rate_limited",
      +  "not_checked",
      +  "no_buyable_offer"
      +]
  5. Changed3 schema fields changed
    • changedInput schema / properties / fulfillment_mode / description
      Previous value: -"Selected fulfillment mode: local_delivery is same-day; ship_to_home ships to the delivery address."New value: +"Selected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by); ship_to_home ships to the delivery address."
    • changedOutput schema / properties / quote / properties / eta / description
      Previous value: -"same_day for local delivery; a display-only date window for ship_to_home. Null when no window is known."New value: +"Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim)."
    • addedOutput schema / properties / quote / properties / eta / properties / deliver_by_text
      Added value: +{
      +  "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
      +  "type": "string"
      +}
  6. Changed3 schema fields changed
    • changedOutput schema / properties / kind / enum
      Previous value: -[
      -  "basket",
      -  "concierge_request"
      -]New value: +[
      +  "basket"
      +]
    • changedOutput schema / properties / quote / properties / reason_code / enum
      Previous value: -[
      -  "no_price",
      -  "no_live_offer",
      -  "out_of_stock",
      -  "not_served_locally",
      -  "variant_required",
      -  "product_not_found",
      -  "invalid_input",
      -  "fee_unavailable",
      -  "quote_unavailable",
      -  "catalog_unavailable",
      -  "rate_limited",
      -  "not_checked"
      -]New value: +[
      +  "no_price",
      +  "no_live_offer",
      +  "out_of_stock",
      +  "not_served_locally",
      +  "variant_required",
      +  "product_not_found",
      +  "invalid_input",
      +  "fee_unavailable",
      +  "quote_unavailable",
      +  "catalog_unavailable",
      +  "rate_limited",
      +  "not_checked",
      +  "no_buyable_offer"
      +]
    • changedOutput schema / properties / reason_code / enum
      Previous value: -[
      -  "no_price",
      -  "no_live_offer",
      -  "out_of_stock",
      -  "not_served_locally",
      -  "variant_required",
      -  "product_not_found",
      -  "invalid_input",
      -  "fee_unavailable",
      -  "quote_unavailable",
      -  "catalog_unavailable",
      -  "rate_limited",
      -  "not_checked"
      -]New value: +[
      +  "no_price",
      +  "no_live_offer",
      +  "out_of_stock",
      +  "not_served_locally",
      +  "variant_required",
      +  "product_not_found",
      +  "invalid_input",
      +  "fee_unavailable",
      +  "quote_unavailable",
      +  "catalog_unavailable",
      +  "rate_limited",
      +  "not_checked",
      +  "no_buyable_offer"
      +]
  7. Changed7 schema fields changed
    • addedOutput schema / properties / delivery_promise
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / fulfilled_by
      Added value: +{
      +  "const": "Delivered by JENNi",
      +  "type": "string"
      +}
    • addedOutput schema / properties / fulfillment_mode
      Added value: +{
      +  "enum": [
      +    "local_delivery",
      +    "ship_to_home"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / product_id
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / quote
      Added value: +{
      +  "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total (before sales tax, which checkout adds). Null when the price could not be read; reason_code says why.",
      +  "properties": {
      +    "currency": {
      +      "const": "USD",
      +      "type": "string"
      +    },
      +    "eta": {
      +      "description": "same_day for local delivery; a display-only date window for ship_to_home. Null when no window is known.",
      +      "properties": {
      +        "earliest_date": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "kind": {
      +          "enum": [
      +            "same_day",
      +            "window"
      +          ],
      +          "type": "string"
      +        },
      +        "latest_date": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "fee": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "fee_cents": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "fee_kind": {
      +      "enum": [
      +        "local_delivery_fee",
      +        "shipping"
      +      ],
      +      "type": "string"
      +    },
      +    "fulfilled_by": {
      +      "const": "Delivered by JENNi",
      +      "type": "string"
      +    },
      +    "fulfillment_mode": {
      +      "enum": [
      +        "local_delivery",
      +        "ship_to_home"
      +      ],
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "quantity": {
      +      "type": "integer"
      +    },
      +    "reason_code": {
      +      "enum": [
      +        "no_price",
      +        "no_live_offer",
      +        "out_of_stock",
      +        "not_served_locally",
      +        "variant_required",
      +        "product_not_found",
      +        "invalid_input",
      +        "fee_unavailable",
      +        "quote_unavailable",
      +        "catalog_unavailable",
      +        "rate_limited",
      +        "not_checked"
      +      ],
      +      "type": "string"
      +    },
      +    "subtotal": {
      +      "type": "string"
      +    },
      +    "subtotal_cents": {
      +      "type": "integer"
      +    },
      +    "tax": {
      +      "const": "added_at_checkout",
      +      "type": "string"
      +    },
      +    "total": {
      +      "description": "subtotal + fee before tax; null when the fee could not be read.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total_cents": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "unit_price": {
      +      "type": "string"
      +    },
      +    "unit_price_cents": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / reason_code
      Added value: +{
      +  "description": "Machine-readable reason, alongside the prose note.",
      +  "enum": [
      +    "no_price",
      +    "no_live_offer",
      +    "out_of_stock",
      +    "not_served_locally",
      +    "variant_required",
      +    "product_not_found",
      +    "invalid_input",
      +    "fee_unavailable",
      +    "quote_unavailable",
      +    "catalog_unavailable",
      +    "rate_limited",
      +    "not_checked"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / unit_price / description
      Previous value: -"The shelf price the page shows; checkout states the total."New value: +"The unit price the page shows; null when it could not be read (reason_code says why)."
  8. Changed5 schema fields changed
    • addedInput schema / properties / delivery_address
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Delivery destination. Address details are not placed in the checkout URL.",
      +  "properties": {
      +    "address1": {
      +      "type": "string"
      +    },
      +    "address2": {
      +      "type": "string"
      +    },
      +    "city": {
      +      "type": "string"
      +    },
      +    "postal_code": {
      +      "description": "5-digit US delivery ZIP code.",
      +      "type": "string"
      +    },
      +    "state": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "postal_code"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / fulfillment_mode / description
      Previous value: -"Requested fulfillment mode. Eligibility is checked for the exact product, ZIP and quantity."New value: +"Selected fulfillment mode: local_delivery is same-day; ship_to_home ships to the delivery address."
    • removedInput schema / properties / quantity
      Removed value: -{
      -  "description": "How many (default 1).",
      -  "maximum": 99,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / zip
      Removed value: -{
      -  "description": "5-digit US ZIP code the order is delivered to, e.g. 78205.",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "product_id",
      -  "zip",
      -  "quantity",
      -  "fulfillment_mode"
      -]New value: +[
      +  "product_id",
      +  "fulfillment_mode",
      +  "delivery_address"
      +]
  9. Changed1 schema field changed
    • changedInput schema / properties / fulfillment_mode / description
      Previous value: -"Retain the mode chosen from get_buying_options."New value: +"Requested fulfillment mode. Eligibility is checked for the exact product, ZIP and quantity."
  10. Changed2 schema fields changed
    • removedInput schema / properties / store_id
      Removed value: -{
      -  "description": "Optional. store_id of an offer with is_eligible_checkout true, or a concierge offer. Omit it and JENNi picks the best orderable offer for the ZIP.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / store_name
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
  11. Changed2 schema fields changed
    • changedInput schema / properties / store_id / description
      Previous value: -"store_id of an offer with is_eligible_checkout true, or a concierge offer."New value: +"Optional. store_id of an offer with is_eligible_checkout true, or a concierge offer. Omit it and JENNi picks the best orderable offer for the ZIP."
    • changedInput schema / required
      Previous value: -[
      -  "product_id",
      -  "store_id",
      -  "zip",
      -  "quantity",
      -  "fulfillment_mode"
      -]New value: +[
      +  "product_id",
      +  "zip",
      +  "quantity",
      +  "fulfillment_mode"
      +]
  12. First observed

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the description reinforces this with the high-value clarification that no order, reservation or charge is created. It also discloses that the hosted page re-verifies price and availability at purchase time, which is genuine behavioral context not present in the annotations. It stops short of auth requirements, rate limits, or expiry of the generated link.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the return value and the multi-item rule, which are the two things an agent most needs. The last two sentences describing the buyer's review-and-pay flow are somewhat expansive relative to the tool's single job, costing a little tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full schema coverage, the description does not need to explain return shape, and it covers the important safety story (no order/charge) plus linkage to `get_buying_options` via delivery_promise. The one material gap is sibling differentiation against `create_checkout`/`complete_checkout`, which matters given how close those names are.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema does not: the ZIP-or-address alternative for delivery location, and that passing `items` instead of `product_id` yields one basket in a single `checkout_url`. Those are semantic clarifications about mutual exclusivity and outcome, not restatements of field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb and output ('Returns a hosted checkout_url') scoped to a product and fulfillment mode, and it explains the multi-item variant via `items`. It never distinguishes itself from the sibling `create_checkout`, `update_checkout` or `complete_checkout`, so an agent cannot tell from the text alone which of these similarly named tools to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'For several products, pass items instead of product_id' gives real selection guidance between two parameter paths. However, there is no guidance on when to use this versus `create_checkout` or `complete_checkout`, nor any stated prerequisites (e.g. must a buying-options read happen first). Usage is implied by the buyer-flow narrative rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources