---
title: "Cart Checkout"
method: POST
path: "/carts/{cart_id}/checkout"
tags: ["Carts"]
---

# Cart Checkout

`POST /carts/{cart_id}/checkout`

## Request

- Base URL: `https://api.liftforward.com`
- URL: `https://api.liftforward.com/carts/{cart_id}/checkout`
- Auth: API key in header `Api-Key`

Checkout will begin the process of transforming the cart indicated by the `cart_id` parameter it into a SubscriptionOrder and create one or more DropShipPurchaseOrders.

When the API returns a 200 response the carts `status` will be updated to `checkout_in_progress` and this will kick off a asynchronous process to complete placing the order. Typically there are several additional asynchronous steps required to complete the checkout process.

Merchants can poll the Show Cart API to check the status of the cart. Once the asynchronous process is complete the cart status will be updated to `checkout_complete` or `checkout_failed`. When successful, Merchants should begin their internal fulfillment process for the order.

The `cart_id` and `merchant_order_id` parameters are required. The `merchant_order_id` is the merchant's unique identifier for the order. The provided `merchant_order_id` will allow the merchant to find associated DropShipPurchaseOrders via the GET /drop_ship_purchase_orders api.

The `merchant_order_id` must be unique for the each successful cart checkout. If the merchant provides a duplicate `merchant_order_id` the API will return a 409 Conflict error.

Merchants should verify the cart's `can_checkout` attribute is `true` before calling checkout. If the cart is not ready to checkout the API will return a 409 error.

## Path parameters

- `cart_id` string, required

## Request body

- PostCartsCartIdCheckout: Cart Checkout
  - `cart` MerchantApiEntitiesCartCheckoutEntity, required
    - `merchant_order_id` string, required: Unique identifier used by merchant the order that will be created for this cart.

## Response `201`

Cart Checkout

- MerchantApiEntitiesCartResponse: MerchantApi_Entities_CartResponse model
  - `cart` CartEntity
    - `cart_id` string, required: Unique identifier for the Cart.
    - `merchant_customer_id` string, required: Unique identifier for customer. Provided by the Merchant on create.
    - `merchant` MerchantApiEntitiesMerchantEntity
      - `source_channel_id` 'IN_STORE' | 'ONLINE_IN_STORE' | 'ONLINE_SHIP_TO_HOME': String identifying the sales channel the order originated from. ONLINE_SHIP_TO_HOME for typical ecommerce, ONLINE_IN_STORE for click and collect, IN_STORE for point of sale.
      - `store_id` string: String to identify merchant's store.
      - `employee_id` string: String to identify merchant's employee who assisted with sale.
      - `merchant_metadata` object: Arbitrary metadata for the session
    - `country_code` string, required: ISO 3166 2-character country code.
    - `created_at` string, required: Date and Time (UTC) the cart was created.
    - `currency` string: ISO 4217 3-character currency code.
    - `total_sale_price` number, float: Total cash value of merchandise specified in the items array.
    - `total_price` number, float: Total amount to be financed for this cart. Should equal sum of total_sale_price, total_sales_tax, total_shipping_fee and total_misc_fees.
    - `total_sales_tax` number, float: Total sales tax for this order.
    - `total_installment_payment` number, float: The sum of installment payment for all items.
    - `status` 'checkout_complete' | 'checkout_failed' | 'checkout_in_progress' | 'checkout_retrying' | 'draft': The status of the cart.
    - `can_checkout` boolean, required: Whether the cart can be checked out.
    - `is_compliant` boolean, required: Whether the cart has compliance errors
    - `compliance_errors` EcommerceApiEntitiesCartComplianceErrorEntity[], required: Compliance errors for the cart
      - `key` 'over_limit' | 'hero_product_missing' | 'hero_quantity_exceeded' | 'max_quantity_exceeded' | 'max_hero_product_count_exceeded' | 'application_declined' | 'application_expired' | 'application_not_accepted' | 'application_canceled' | 'max_premium_plans_exceeded' | 'min_order_total_not_met' | 'accessory_price_exceeded' | 'max_order_total_exceeded' | 'shipping_address_missing' | 'payment_token_missing' | 'sales_quote_expired', required: The key of the compliance error.
      - `type` 'over_limit' | 'hero_product_missing' | 'hero_quantity_exceeded' | 'max_quantity_exceeded' | 'max_hero_product_count_exceeded' | 'application_declined' | 'application_expired' | 'application_not_accepted' | 'application_canceled' | 'max_premium_plans_exceeded' | 'min_order_total_not_met' | 'accessory_price_exceeded' | 'max_order_total_exceeded' | 'shipping_address_missing' | 'payment_token_missing' | 'sales_quote_expired', required: Type of compliance error. .
    - `sales_tax_rates` MerchantApiEntitiesSalesTaxRateEntity[], required: Intended for display purposes only. An array of taxes applicable to this product.
      - `sales_tax_rate_code` 'VAT' | 'GST' | 'HST' | 'PST' | 'QST', required: The unique code for this sales tax rate
      - `rate` number, float, required: Tax rate in decimal
      - `amount` number, float, required: Tax amount in purchase currency
    - `rental_items` CartItemEntity[], required: Cart items with a RENT contract type.
      - `cart_item_id` string, required: Unique identifier for the Cart Item
      - `product_id` string, required: Unique identifier for this Product.
      - `product_name` string, required: Display name for product.
      - `merchant_sku` string, required: Unique SKU identifier for the product.
      - `unit_retail_price` number, double, required: Unit retail price for the item including any typically embedded taxes and fees.
      - `unit_sale_price` number, double, required: Unit price the item should be sold for including any discount or typically embedded taxes and fees.
      - `total_payment_to_buy_out` number, float, required: The total amount the customer must pay before they buy out the item.
      - `total_payment_to_trade_in` number, float, required: The total amount the customer must pay before they can trade in the item.
      - `unit_installment_payment` number, float, required: Amount of each payment customer will make per unit item.
      - `installment_service_fee` number, float, required: Fee customer must pay along with the unit_installment_payment. Used only on some programs.
      - `total_installment_service_fee` number, float, required: Sum of the installment_service_fee over the term of the loan. Used only on some programs.
      - `currency` string, required: ISO 4217 3 character currency code.
      - `installment_count` integer, required: Count of installments (aka payments) for this line item.
      - `cart_max_quantity` integer: Maximum number of these items allowed in the cart at once. Null indicates no limit.
      - `available` boolean, required: Indicates if the product is available for purchase.
      - `inventory_message` string: The message that is displayed on detail page next to the product. For example: “Ships today”, “Ships in 3 weeks” or “Low availability”.
      - `inventory_help_message` string: The message that is displayed to a customer when they hover over the availability help icon on product detail page. For example “Available on mm/dd/yyyy”.
      - `contract_type` 'FINANCING' | 'RENT' | 'SERVICE' | 'SERVICE_SUBSCRIPTION', required: RENT - Rental item purchased with the opportunity to upgrade.\ FINANCE - Item financed with no opportunity to upgrade. \ SERVICE - Service associated with an item.
      - `discontinued` boolean, required: true - indicates the product is no longer available for purchase in the program.\ false - indicates the product is available for purchase in the program.
      - `residual_value_category` string: The residual value category for the product, typically "{model} {processor}". Used to calculate product residual values in some programs. Accepted values are program dependent - LiftForward maintains the list for your program. A product sent with an unrecognised category is still accepted, but carries no residual value and is hidden from the storefront until the category is added.
      - `residual_value` string, required: The total residual value for this line item (unit residual value * quantity).
      - `total_over_term` string, required: The total amount paid over the term of the contract for this line item.
      - `sales_tax_rates` MerchantApiEntitiesSalesTaxRateEntity[], required: Intended for display purposes only. An array of taxes applicable to this product.
        - `sales_tax_rate_code` 'VAT' | 'GST' | 'HST' | 'PST' | 'QST', required: The unique code for this sales tax rate
        - `rate` number, float, required: Tax rate in decimal
        - `amount` number, float, required: Tax amount in purchase currency
      - `linked_service_item_ids` string[], required: Cart Item IDs of services linked to this Cart Item
      - `linked_cart_item_ids` string[], required: Cart Item IDs of products linked to this service Cart Item
      - `subscription_plan` MerchantApiEntitiesSubscriptionPlanEntity
        - `subscription_plan_id` string, required: The unique id for this plan.
        - `program_code` string, required: The program code for the subscription plan.
        - `plan_code` string, required: A short string that identifies the type of plan independent of the installment_count.
        - `plan_name` string, required: A displayable name for this plan.
        - `plan_subtitle` string, required: Promotional copy to display for this plan.
        - `plan_summary` string, required: Longer summary description on the plan and it's benefits
        - `financing_plan_type` 'financing' | 'upgrade', required: The type of financing plan for this product.
    - `finance_items` CartItemEntity[], required: Cart items with a FINANCED contract type.
      - `cart_item_id` string, required: Unique identifier for the Cart Item
      - `product_id` string, required: Unique identifier for this Product.
      - `product_name` string, required: Display name for product.
      - `merchant_sku` string, required: Unique SKU identifier for the product.
      - `unit_retail_price` number, double, required: Unit retail price for the item including any typically embedded taxes and fees.
      - `unit_sale_price` number, double, required: Unit price the item should be sold for including any discount or typically embedded taxes and fees.
      - `total_payment_to_buy_out` number, float, required: The total amount the customer must pay before they buy out the item.
      - `total_payment_to_trade_in` number, float, required: The total amount the customer must pay before they can trade in the item.
      - `unit_installment_payment` number, float, required: Amount of each payment customer will make per unit item.
      - `installment_service_fee` number, float, required: Fee customer must pay along with the unit_installment_payment. Used only on some programs.
      - `total_installment_service_fee` number, float, required: Sum of the installment_service_fee over the term of the loan. Used only on some programs.
      - `currency` string, required: ISO 4217 3 character currency code.
      - `installment_count` integer, required: Count of installments (aka payments) for this line item.
      - `cart_max_quantity` integer: Maximum number of these items allowed in the cart at once. Null indicates no limit.
      - `available` boolean, required: Indicates if the product is available for purchase.
      - `inventory_message` string: The message that is displayed on detail page next to the product. For example: “Ships today”, “Ships in 3 weeks” or “Low availability”.
      - `inventory_help_message` string: The message that is displayed to a customer when they hover over the availability help icon on product detail page. For example “Available on mm/dd/yyyy”.
      - `contract_type` 'FINANCING' | 'RENT' | 'SERVICE' | 'SERVICE_SUBSCRIPTION', required: RENT - Rental item purchased with the opportunity to upgrade.\ FINANCE - Item financed with no opportunity to upgrade. \ SERVICE - Service associated with an item.
      - `discontinued` boolean, required: true - indicates the product is no longer available for purchase in the program.\ false - indicates the product is available for purchase in the program.
      - `residual_value_category` string: The residual value category for the product, typically "{model} {processor}". Used to calculate product residual values in some programs. Accepted values are program dependent - LiftForward maintains the list for your program. A product sent with an unrecognised category is still accepted, but carries no residual value and is hidden from the storefront until the category is added.
      - `residual_value` string, required: The total residual value for this line item (unit residual value * quantity).
      - `total_over_term` string, required: The total amount paid over the term of the contract for this line item.
      - `sales_tax_rates` MerchantApiEntitiesSalesTaxRateEntity[], required: Intended for display purposes only. An array of taxes applicable to this product.
        - `sales_tax_rate_code` 'VAT' | 'GST' | 'HST' | 'PST' | 'QST', required: The unique code for this sales tax rate
        - `rate` number, float, required: Tax rate in decimal
        - `amount` number, float, required: Tax amount in purchase currency
      - `linked_service_item_ids` string[], required: Cart Item IDs of services linked to this Cart Item
      - `linked_cart_item_ids` string[], required: Cart Item IDs of products linked to this service Cart Item
      - `subscription_plan` MerchantApiEntitiesSubscriptionPlanEntity
        - `subscription_plan_id` string, required: The unique id for this plan.
        - `program_code` string, required: The program code for the subscription plan.
        - `plan_code` string, required: A short string that identifies the type of plan independent of the installment_count.
        - `plan_name` string, required: A displayable name for this plan.
        - `plan_subtitle` string, required: Promotional copy to display for this plan.
        - `plan_summary` string, required: Longer summary description on the plan and it's benefits
        - `financing_plan_type` 'financing' | 'upgrade', required: The type of financing plan for this product.
    - `service_items` CartItemEntity[], required: Cart items with a SERVICE contract type.
      - `cart_item_id` string, required: Unique identifier for the Cart Item
      - `product_id` string, required: Unique identifier for this Product.
      - `product_name` string, required: Display name for product.
      - `merchant_sku` string, required: Unique SKU identifier for the product.
      - `unit_retail_price` number, double, required: Unit retail price for the item including any typically embedded taxes and fees.
      - `unit_sale_price` number, double, required: Unit price the item should be sold for including any discount or typically embedded taxes and fees.
      - `total_payment_to_buy_out` number, float, required: The total amount the customer must pay before they buy out the item.
      - `total_payment_to_trade_in` number, float, required: The total amount the customer must pay before they can trade in the item.
      - `unit_installment_payment` number, float, required: Amount of each payment customer will make per unit item.
      - `installment_service_fee` number, float, required: Fee customer must pay along with the unit_installment_payment. Used only on some programs.
      - `total_installment_service_fee` number, float, required: Sum of the installment_service_fee over the term of the loan. Used only on some programs.
      - `currency` string, required: ISO 4217 3 character currency code.
      - `installment_count` integer, required: Count of installments (aka payments) for this line item.
      - `cart_max_quantity` integer: Maximum number of these items allowed in the cart at once. Null indicates no limit.
      - `available` boolean, required: Indicates if the product is available for purchase.
      - `inventory_message` string: The message that is displayed on detail page next to the product. For example: “Ships today”, “Ships in 3 weeks” or “Low availability”.
      - `inventory_help_message` string: The message that is displayed to a customer when they hover over the availability help icon on product detail page. For example “Available on mm/dd/yyyy”.
      - `contract_type` 'FINANCING' | 'RENT' | 'SERVICE' | 'SERVICE_SUBSCRIPTION', required: RENT - Rental item purchased with the opportunity to upgrade.\ FINANCE - Item financed with no opportunity to upgrade. \ SERVICE - Service associated with an item.
      - `discontinued` boolean, required: true - indicates the product is no longer available for purchase in the program.\ false - indicates the product is available for purchase in the program.
      - `residual_value_category` string: The residual value category for the product, typically "{model} {processor}". Used to calculate product residual values in some programs. Accepted values are program dependent - LiftForward maintains the list for your program. A product sent with an unrecognised category is still accepted, but carries no residual value and is hidden from the storefront until the category is added.
      - `residual_value` string, required: The total residual value for this line item (unit residual value * quantity).
      - `total_over_term` string, required: The total amount paid over the term of the contract for this line item.
      - `sales_tax_rates` MerchantApiEntitiesSalesTaxRateEntity[], required: Intended for display purposes only. An array of taxes applicable to this product.
        - `sales_tax_rate_code` 'VAT' | 'GST' | 'HST' | 'PST' | 'QST', required: The unique code for this sales tax rate
        - `rate` number, float, required: Tax rate in decimal
        - `amount` number, float, required: Tax amount in purchase currency
      - `linked_service_item_ids` string[], required: Cart Item IDs of services linked to this Cart Item
      - `linked_cart_item_ids` string[], required: Cart Item IDs of products linked to this service Cart Item
      - `subscription_plan` MerchantApiEntitiesSubscriptionPlanEntity
        - `subscription_plan_id` string, required: The unique id for this plan.
        - `program_code` string, required: The program code for the subscription plan.
        - `plan_code` string, required: A short string that identifies the type of plan independent of the installment_count.
        - `plan_name` string, required: A displayable name for this plan.
        - `plan_subtitle` string, required: Promotional copy to display for this plan.
        - `plan_summary` string, required: Longer summary description on the plan and it's benefits
        - `financing_plan_type` 'financing' | 'upgrade', required: The type of financing plan for this product.

## Other responses

- `400`: Invalid parameters
- `401`: Unauthorized
- `405`: Not Allowed
- `408`: Request Time Out
- `409`: Conflict
- `500`: Internal Service Error
- `503`: Service Unavailable

---

[API](https://skmtc.dev/liftforward/apis/device-as-a-service-merchant-apis-lift-daas-service-producti.md) - [All operations](https://skmtc.dev/liftforward/apis/device-as-a-service-merchant-apis-lift-daas-service-producti/llms.txt) - [OpenAPI document](https://skmtc.dev/liftforward/apis/device-as-a-service-merchant-apis-lift-daas-service-producti/revisions/5a1383ffd271?raw)
