{"title":"checkout:start","slug":"pos-checkout-start-action","url":"https://support.storeconnect.com/articles/pos-checkout-start-action","url_markdown":"https://support.storeconnect.com/articles/pos-checkout-start-action.md","subtitle":null,"summary":"The checkout:start POS action starts checkout from the active (or a specified) cart, running the same validation as the cart Pay button. It can be triggered from action items or custom JavaScript.","type":"Developer_Documentation","video_url":"","keywords":"POS, checkout:start, scAction, action reference, cart, checkout, validation","last_modified":"2026-08-21T07:12:35+0000","body_markdown":"`checkout:start` starts checkout from a cart, performing the same validation the cart **Pay** button uses. It can be configured on a POS action item or called from custom JavaScript via [pos-sc-action](pos-sc-action).\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `cart_sc_id` | String | No | Salesforce ID of the cart to start checkout from. If omitted, the active cart is used. If provided and different from the active cart, that cart is resumed first. |\n\n## Behavior\n\n1. If `cart_sc_id` refers to a cart other than the active one, the action resumes that cart first (using the same linkage safety check as `cart:resume`).\n2. The cart is validated using the same rules the Pay button uses. If any check fails, an alert modal explains the reason and the action stops.\n3. The checkout type is set to `POS_ORDER`.\n4. If the cart has a non-zero amount to pay (the common case), the user is taken to the checkout payment screen.\n5. If the cart total is zero (e.g. a fully-deposited cart or a pure refund), the order is created immediately and the user is navigated to the order record. For refund carts, the matching credit p[...]\n\nIf `cart_sc_id` refers to a cart that is already linked to an order, the existing \"order connected\" modal is shown instead of starting checkout — matching the behavior of `cart:resume`.\n\n### Validation rules\n\nThe action shows an alert and stops if any of the following conditions are detected:\n\n| Reason | Alert message |\n|--------|---------------|\n| `empty_cart` | Unable to start checkout with an empty cart |\n| `syncing` | Cart is still syncing. Please wait and try again. |\n| `pending_items` | Some items are still being added. Please wait and try again. |\n| `expired_items` | A rental hold has expired. Review the cart before proceeding. |\n| `fulfillment_needs_attention` | Delivery details have changed. Please confirm them before continuing. |\n| `customer_required_subscription` | A customer is required to check out subscription items. |\n| `customer_required_serial_item` | A customer is required to check out items with serial numbers. |\n| `customer_required_delivery` | A customer is required to check out a delivery or non-takeaway fulfillment. |\n| `customer_required_rental` | A customer is required to check out rental items. |\n| `customer_required_voucher` | A customer is required for vouchers that auto-generate a code or PIN. |\n| `customer_required` | A customer is required for this order. |\n| `serial_numbers_missing` | Serial numbers are missing for one or more items. |\n| `invalid_discount` | Cart discount exceeds the maximum allowed for the current items. |\n\n## Returned context\n\nWhen checkout starts successfully, the action returns context available to the next action in a chain or to Liquid templates:\n\n| Field | Type | When |\n|-------|------|------|\n| `cart_sc_id` | String | Always (the active cart at completion) |\n| `order_id` | String | Only when a zero-total order was created immediately |\n\n## Usage\n\n### Action item configuration\n\nSet the **Action** field on a `s_c__Pos_Action_Item__c` record:\n\n```\ncheckout:start\n```\n\nTo target a specific cart:\n\n```\ncheckout:start\n```\n\nwith **Params** set to:\n\n```\ncart_sc_id=\u003cSalesforce cart ID\u003e\n```\n\n### Liquid/HTML template\n\n```html\n\n\u003cbutton type=\"button\" onclick=\"scAction('checkout:start')\"\u003ePay\u003c/button\u003e\n```\n\n\n```html\n\n\u003cbutton\n  type=\"button\"\n  onclick=\"scAction('checkout:start', { cart_sc_id: '{{ cart.id }}' })\"\n\u003e\n  Resume and pay\n\u003c/button\u003e\n```\n\n\n### JavaScript\n\n```javascript\n\nscAction('checkout:start')\nscAction('checkout:start', { cart_sc_id: 'abc-123' })\n```\n\nWith success/error handling:\n\n```javascript\n\nscAction(\n  'checkout:start',\n  {},\n  {\n    onSuccess: () =\u003e console.log('Checkout started'),\n    onError: (error) =\u003e console.error('Could not start checkout:', error),\n  }\n)\n```"}