Skip to main content

Checkout Flow

The checkout process converts a shopping basket into an order through a multi-step session.

Complete Flow​

Step 1: Create Checkout Session​

POST /api/storefront/checkout/session
Authorization: Bearer <token>
Content-Type: application/json

{
"basketId": "basket-uuid",
"shippingAddress": {
"firstName": "John",
"lastName": "Doe",
"addressLine1": "123 Main St",
"city": "New York",
"stateProvince": "NY",
"postalCode": "10001",
"countryCode": "US",
"phone": "+1234567890"
},
"billingAddress": {
"sameAsShipping": true
}
}

Response:

{
"sessionId": "guid",
"items": [...],
"subTotal": 59.98,
"promotionDiscount": 12.00,
"discountCodeDiscount": 0,
"availableShippingMethods": [
{ "id": "guid", "name": "Standard Shipping", "cost": 5.99, "estimatedDays": "3-5" },
{ "id": "guid", "name": "Express Shipping", "cost": 14.99, "estimatedDays": "1-2" }
],
"availablePaymentMethods": ["stripe", "iyzico"]
}

Step 2: Select Shipping Method​

PUT /api/storefront/checkout/session/{sessionId}/shipping
Content-Type: application/json

{
"shippingMethodId": "guid"
}

Step 3: Select Payment Method​

PUT /api/storefront/checkout/session/{sessionId}/payment
Content-Type: application/json

{
"paymentMethod": "stripe"
}

Step 4: Confirm & Pay​

POST /api/storefront/checkout/session/{sessionId}/confirm

This creates the order and initiates the payment. The response includes the payment provider's client secret for completing payment on the frontend.

Step 5: Confirm Payment​

After the user completes payment on the client side (e.g., via Stripe.js):

POST /api/storefront/payments/confirm
Content-Type: application/json

{
"sessionId": "guid",
"paymentIntentId": "pi_..."
}

Checkout Session Fields​

FieldDescription
subTotalSum of item prices before discounts
promotionDiscountAutomatic promotion discount amount
discountCodeDiscountApplied discount code amount
shippingCostSelected shipping method cost
taxAmountCalculated tax
totalAmountFinal amount to charge

Important Notes​

Authentication Required

All checkout endpoints require a valid JWT token. Guest checkout is not supported — users must register/login first.

Shipping Methods

Available shipping methods depend on the store configuration and the shipping address country. Fetch them as part of the checkout session creation.

Promotions in Checkout

Automatic promotions (including free shipping promotions) are re-evaluated during checkout. If a promotion grants free shipping, the shippingCost will be 0 and hasFreeShipping will be true.