---
title: "Create an authenticated customer checkout order"
method: POST
path: "/v3/stores/{store_id}/customers/me/checkout"
tags: ["Customer Checkout"]
---

# Create an authenticated customer checkout order

`POST /v3/stores/{store_id}/customers/me/checkout`

Customer-authenticated storefront endpoint. Create an order from direct `items`, from a customer cart referenced by `cart_id`, or from direct `items` while clearing the referenced cart after successful order creation. Carts must belong to the authenticated customer and current store. Product prices, discounts, shipping, Other Income, the Store customer-fee policy, and service fees are recalculated from current backend data during creation. Preview values are not confirmation inputs and do not produce a quote-conflict response.

## Path parameters

- `store_id` string, required

## Request body

- CustomerCheckoutRequest
  - `items` StorefrontCheckoutItem[] — Optional direct item source. If supplied, direct items create the order. If `cart_id` is also supplied, the referenced cart is cleared after successful order creation.
    - union
      - StorefrontCheckoutVariantItem
        - `type` 'variant', required
        - `variant_id` integer, required
        - `quantity` integer, required
      - StorefrontCheckoutBundlePriceOptionItem
        - `type` 'bundle_price_option', required
        - `bundle_price_option_id` integer, required — Bundle price option ID from the storefront catalog.
        - `quantity` integer, required
  - `cart_id` union — Authenticated customer cart ID. Used as the order source when `items` is omitted. When `items` is also supplied, the cart is only cleared after successful order creation.
    - integer
    - string
  - `address_id` union
    - integer
    - string
  - `address` string
  - `location_id` union
    - integer
    - string
  - `postal_code` string
  - `payment_method` string — Customer checkout payment method code selected by the buyer. Required for normal checkout. May be omitted when the store uses strict two-step Payment Link checkout; Scalev resolves it to `payment_link`. Virtual Accounts use flat method codes such as `va_bca`.
  - `courier_service_id` union
    - integer
    - string
  - `warehouse_unique_id` string, nullable
  - `courier_aggregator_code` string, nullable
  - `discount_code_code` string, nullable
  - `notes` string, nullable

## Response `201`

Customer checkout order

- StorefrontPublicOrder
  - `id` string, uuid, required — Canonical UUIDv7 order primary key returned by the partitioned orders table.
  - `business` object, nullable
    - `username` string, nullable
    - `contact_email` string, nullable
    - `aff_code` string, nullable
    - `logo` string, nullable
  - `secret_slug` string, required
  - `public_order_url` string, uri, nullable, required
  - `payment_url` string, uri, nullable, required
  - `order_id` string, required
  - `status` string, required
  - `payment_status` string, nullable, required — Buyer-facing payment status. A settled payment is exposed as `paid`; this field never returns `settled`.
  - `post_payment_redirect_url` string, uri — Canonical post-payment destination exposed only after a buyer-paid outcome (internal payment status `paid` or `settled`) when a valid redirect snapshot exists. Omitted before payment and when Scalev's hosted success flow applies.
  - `is_probably_spam` boolean, nullable
  - `draft_time` string, date-time, nullable
  - `paid_time` string, date-time, nullable
  - `transfer_time` string, date-time, nullable
  - `transferproof_url` string, nullable
  - `handler_phone` string, nullable
  - `chat_message` string, nullable
  - `customer_id` integer, nullable
  - `discount_code_code` string, nullable
  - `page` object, nullable
    - `slug` string, nullable
  - `gross_revenue` union, required
    - string, nullable
    - number
  - `product_price` union, required
    - string, nullable
    - number
  - `product_discount` union
    - string, nullable
    - number
  - `shipping_cost` union, required
    - string, nullable
    - number
  - `shipping_discount` union
    - string, nullable
    - number
  - `other_income` union
    - string, nullable
    - number
  - `payment_link_income` union
    - string, nullable
    - number
  - `other_income_name` string, nullable — Other Income label. For `payment_link`, the winning concrete Payment Request's frozen Store label is reconciled after payment.
  - `unique_code_discount` union
    - string, nullable
    - number
  - `discount_code_discount` union
    - string, nullable
    - number
  - `pg_payment_info` object, required — Buyer-facing payment gateway payload. Manual methods such as `bank_transfer` and `cod` can return an empty object. Virtual account methods expose provider reference and account details under the provider's `payment_method` object. QRIS responses expose QR data or a QR image payload. E-wallet, card, and invoice methods may expose provider actions or hosted provider URLs. SingaPay payments use normalized keys such as `payment_url`, `deeplink_url`, `qr_string`, `qr_image_url`, `va_number`, and `va_name`.
  - `status_history` object[]
  - `payment_method` string, required
  - `epayment_provider` string, nullable — E-payment provider. `xendit` is the current/managed Xendit provider; `xendit_legacy` is the owned legacy Xendit provider. Other possible values include `duitku`, `midtrans`, `durianpay`, and `singapay`.
  - `payment_account_holder` string, nullable
  - `payment_account_number` string, nullable
  - `shipment_status_history` object[]
    - `timestamp_source` string, nullable
    - `status` string, nullable
    - `description` string, nullable
  - `shipment_receipt` string, nullable
  - `courier_service` object, nullable
    - `name` string, nullable
    - `courier` object, nullable
      - `name` string, nullable
  - `variants` object
  - `bundle_price_options` object
  - `orderlines` object[], required
    - `quantity` integer
    - `product_name` string, nullable
    - `item_type` string, nullable
    - `variant_option1_value` string, nullable
    - `variant_option2_value` string, nullable
    - `variant_option3_value` string, nullable
    - `variant_price` union
      - string, nullable
      - number
  - `payment_expiration_at` string, date-time, nullable
  - `store_custom_domain` object, nullable
    - `full_url` string, nullable
  - `store` object, nullable
    - `name` string, nullable
    - `payment_accounts` object[]
      - `id` integer
      - `account_holder` string, nullable
      - `account_number` string, nullable
      - `method` string, nullable
      - `financial_entity` object, nullable
        - `id` integer
        - `code` string, nullable
        - `name` string, nullable
    - `custom_domain` object, nullable
      - `full_url` string, nullable
    - `days_of_payment_processing` integer, nullable
    - `is_auto_expire` boolean, nullable
    - `auto_expire_days` integer, nullable
    - `is_show_whatsapp` boolean, nullable
    - `is_show_download_invoice` boolean, nullable
  - `destination_address` object, nullable
    - `name` string, nullable
    - `phone` string, nullable
    - `address` string, nullable
    - `subdistrict` string, nullable
    - `city` string, nullable
    - `province` string, nullable
  - `customer` object, nullable
    - `email` string, nullable

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — Not Found

---

[API](https://skmtc.net/scalev/apis/nexus-commerce-api.md) · [All operations](https://skmtc.net/scalev/apis/nexus-commerce-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/scalev/nexus-commerce-api/versions/730030bd6477/schema)
