Start here
cart_error names no cause
cart_error is reported whenever the cart cannot be resolved. The underlying cause is attached internally but is not part of the message, so the same string covers invalid cart contents, a rejected request, a division misconfiguration, and internal errors alike. Treat it as “something about the cart failed” and work through the causes below in order.
A related reason, undefined_cart, is distinct and means no cart was supplied at all. If you see that one, the problem is in how you call BoltCheckout.configure.
Check that every URL in the cart is publicly reachable
This is the most common cause during local development and the least obvious. If any URL in the cart,image_url in particular, points at localhost or another host that is not resolvable from the internet, the request is rejected at the edge before the API sees it. The rejection is an HTML error page, not JSON, so a client that expects JSON fails with a parse error and never sees a Bolt error code.
Confirm it by sending the same cart with image_url omitted. If the call then succeeds, the URL was the cause. For ongoing local work, either omit image_url or serve images through a tunnel.
Check the division has a payment processor
Without one,POST /v1/merchant/orders returns 404 with Merchant Primary Processor not found. The browser reports only cart_error.
Confirm it by calling the endpoint directly and reading the response body rather than relying on the browser. See prerequisites and readiness.
Check your callbacks are succeeding
A failing callback can surface ascart_error. The most common cause is a response Bolt cannot read, usually one missing the required data object. See Merchant Callback conventions.
Order creation fails with an unsupported currency
POST /v1/merchant/orders returns 422:
Payment succeeded and no order was created
This is the most dangerous failure mode on this page, because nothing in the shopper’s experience indicates a problem. Two distinct causes:- Your
order.createcallback is failing. For a custom cart, Bolt records the failure and allows checkout to continue rather than failing the payment. The shopper is charged and no order reaches your server. Log every callback request and response, and alert on your own error rate, because checkout will not surface this for you. order_received_urlis suppressing yoursuccesscallback. If yourorder.createresponse includesorder_received_url, Bolt redirects the shopper and the frontendsuccessandclosecallbacks do not run. A storefront that settles orders insuccesswill never hear about any order. See the checkout button callbacks.
Callbacks never arrive
Confirm what Bolt has registered:cURL
division_id is the second segment of your publishable key; see prerequisites.
If your URL is listed and nothing arrives, the division is most likely not set up as a custom cart, which is what grants the Universal Merchant API. If you configured a Universal API URL and the type was unavailable, register the individual create_order, shipping, and tax types instead, which need no capability. See prerequisites and readiness.
Webhooks never arrive
A webhook endpoint can save successfully, list back from the API, and never deliver, if the division lacks v2 webhooks. Custom cart divisions have it by default. Check that you registered the endpoint under Administration > Developers > Webhooks and not under Merchant Callbacks, which is a separate system. See transaction webhooks.Crash during the delivery step
An error such asCannot read properties of undefined (reading 'frontEndShipping') from Bolt’s own bundle means the division’s platform value is one checkout does not recognize. This is not something you can fix from your integration; ask Bolt to confirm the division is set up as a custom cart.
Modal does not open in production but worked in sandbox
Bolt Checkout only runs on registered Trusted Domains, and sandbox does not appear to enforce this the way production does. An integration developed against a tunnel host or an unregistered domain will work in sandbox and stop working on your production domain, with no message pointing at the cause. Register every host that opens checkout under Administration > Trusted Domains. See Trusted Domains.Sandbox hostnames look inconsistent
Bothapi-sandbox.boltapp.com and api-sandbox.bolt.com serve the sandbox API, and CDN messages sometimes reference connect-sandbox.bolt.com. These are the same systems under two domains. A bolt.com hostname appearing in an error is not a sign you are calling the wrong endpoint.