> For the complete documentation index, see [llms.txt](https://apidocs.akinon.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://apidocs.akinon.com/commerce-openapis/checkout/entry-and-address/submit-index-page-email-and-phone.md).

# Submit Index Page (email and phone)

Submits user email and optional phone number for guest checkout. After successful submission, the system routes to the next appropriate page.

**Configuration**:

* `CAN_GUEST_PURCHASE`: Controls whether guest checkout is allowed. If `false`, user must be authenticated.
* `USER_PHONE_FORMAT`: Phone number format used for display hints and validation guidance (default: `"05999999999"`)

**Next Pages** (determined dynamically):

* If multiple delivery options exist: `DeliveryOptionSelectionPage`
* If scheduled delivery is active: `SlotSelectionPage`
* Otherwise: `AddressSelectionPage`

### Guest phone verification (optional)

When the `checkout-phone` purpose is enabled in `VERIFICATION_TOKEN_CONF`, a **guest** submitting a `phone_number` must first prove they own it with an SMS code. Authenticated users are never affected, and neither is a guest who submits no `phone_number`.

Flow, before calling this endpoint:

1. `POST /users/verification/init/` with `{"purpose": "checkout-phone", "channel": "sms", "target": "<the number>"}` — returns `request_id` and sends the SMS. Both `purpose` and `channel` are fixed for this flow; the backend accepts no channel other than `sms` here, so no channel picker is needed.
2. `POST /users/verification/verify/` with the same `purpose`, `channel` and `target`, plus `request_id` and `code` — returns `verification_token`.
3. Submit this page with that token in the `X-Verification-Token` header.

See the Verification & Step-up API document for those two endpoints.

**The token must travel in the header.** Unlike the DRF endpoints, this checkout view does not parse a `verification_token` body field.

**Failure is reported as HTTP 200.** An unverified number does not produce a 4xx: the response is `200` with `errors.verification_token` populated (`["Phone number is not verified."]`) and `pre_order.phone_number` left unset. Always inspect `errors` on the response instead of relying on the status code, and route the user back to the OTP step when that key is present.

**The token is single-use, and burnt only on success.** Re-submitting the same page after a *different* validation error does not consume it. Once the step succeeds the number is remembered for the session, so going back and re-submitting the **same** number needs no new verification — changing the number does.

**The step cannot be skipped.** While the number is unverified this step counts as neither valid nor done, so requesting a later page (e.g. `?page=AddressSelectionPage`) routes back to `IndexPage` rather than advancing. Do not treat a `context_list` entry for `IndexPage` after such a request as an error — it means the guest still owes the verification.

```json
{"openapi":"3.1.0","info":{"title":"Overview","version":"1.0.0"},"tags":[{"name":"Entry & Address","description":"# Checkout Entry & Address\n\nStart a checkout session and collect delivery information from your customers. These endpoints handle session initialization, delivery address selection, order notes, B2B account settings, and the entry point for external checkout providers.\n\n## Authentication\n\nThese endpoints support both authenticated and anonymous sessions.\n\n- **Authenticated users**: Session cookie (`sessionid`) tracks checkout progress.\n- **Anonymous users**: Guest checkout is available when the `CAN_GUEST_PURCHASE` setting is enabled.\n## Request Format\n\nInclude the following header in all checkout requests:\n\n- **x-requested-with**: `XMLHttpRequest`\n\n## Dynamic Settings\n\n### CAN_GUEST_PURCHASE\nControls whether unauthenticated users can proceed through checkout. When disabled, unauthenticated users are redirected to the login page.\n\n### GIFT_BOX_CONFIGURATIONS\nControls whether the gift box option is shown during checkout entry. Set `is_active` to `true` and provide a product `sku` to enable.\n\n### DEFAULT_COUNTRY_CODE\nDefault country used to pre-populate the country field in the address selection form.\n\n### REMOTE_PRICE_ATTRIBUTE_KEY\nProduct attribute key that flags items requiring remote price calculation. When any basket item carries this attribute, the flow redirects to the remote price calculation step after address selection.\n\n### IDENTITY_NUMBER_REQUIRED_AMOUNT\nWhen set, orders exceeding this total amount require a valid identity number in the shipping address before proceeding.\n\n### USER_PHONE_FORMAT\nDisplay format used as a placeholder for phone number input fields (for example, `05999999999`)."}],"servers":[{"description":"Akinon Checkout API","url":"https://{commerce_url}","variables":{"commerce_url":{"default":"sandbox.akinon.com"}}}],"paths":{"/orders/checkout/?page=IndexPage":{"post":{"tags":["Entry & Address"],"operationId":"submitIndexPage","summary":"Submit Index Page (email and phone)","description":"Submits user email and optional phone number for guest checkout.\nAfter successful submission, the system routes to the next appropriate page.\n\n**Configuration**:\n- `CAN_GUEST_PURCHASE`: Controls whether guest checkout is allowed. If `false`, user must be authenticated.\n- `USER_PHONE_FORMAT`: Phone number format used for display hints and validation guidance (default: `\"05999999999\"`)\n\n**Next Pages** (determined dynamically):\n- If multiple delivery options exist: `DeliveryOptionSelectionPage`\n- If scheduled delivery is active: `SlotSelectionPage`\n- Otherwise: `AddressSelectionPage`\n\n## Guest phone verification (optional)\n\nWhen the `checkout-phone` purpose is enabled in `VERIFICATION_TOKEN_CONF`,\na **guest** submitting a `phone_number` must first prove they own it with\nan SMS code. Authenticated users are never affected, and neither is a\nguest who submits no `phone_number`.\n\nFlow, before calling this endpoint:\n\n1. `POST /users/verification/init/` with\n   `{\"purpose\": \"checkout-phone\", \"channel\": \"sms\", \"target\": \"<the number>\"}`\n   — returns `request_id` and sends the SMS. Both `purpose` and `channel`\n   are fixed for this flow; the backend accepts no channel other than\n   `sms` here, so no channel picker is needed.\n2. `POST /users/verification/verify/` with the same `purpose`, `channel`\n   and `target`, plus `request_id` and `code` — returns\n   `verification_token`.\n3. Submit this page with that token in the `X-Verification-Token` header.\n\nSee the Verification & Step-up API document for those two endpoints.\n\n**The token must travel in the header.** Unlike the DRF endpoints, this\ncheckout view does not parse a `verification_token` body field.\n\n**Failure is reported as HTTP 200.** An unverified number does not produce\na 4xx: the response is `200` with `errors.verification_token` populated\n(`[\"Phone number is not verified.\"]`) and `pre_order.phone_number` left\nunset. Always inspect `errors` on the response instead of relying on the\nstatus code, and route the user back to the OTP step when that key is\npresent.\n\n**The token is single-use, and burnt only on success.** Re-submitting the\nsame page after a *different* validation error does not consume it. Once\nthe step succeeds the number is remembered for the session, so going back\nand re-submitting the **same** number needs no new verification — changing\nthe number does.\n\n**The step cannot be skipped.** While the number is unverified this step\ncounts as neither valid nor done, so requesting a later page (e.g.\n`?page=AddressSelectionPage`) routes back to `IndexPage` rather than\nadvancing. Do not treat a `context_list` entry for `IndexPage` after such a\nrequest as an error — it means the guest still owes the verification.","parameters":[{"$ref":"#/components/parameters/AjaxRequestHeader"},{"$ref":"#/components/parameters/SessionCookieHeader"},{"$ref":"#/components/parameters/VerificationTokenHeader"}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/IndexPageInput"}}}},"responses":{"200":{"description":"Email submitted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}}}}}},"components":{"parameters":{"AjaxRequestHeader":{"name":"x-requested-with","in":"header","required":true,"description":"Required header for AJAX requests. Must be set to `XMLHttpRequest` for all checkout requests.","schema":{"type":"string","enum":["XMLHttpRequest"],"default":"XMLHttpRequest"}},"SessionCookieHeader":{"name":"Cookie","in":"header","required":false,"description":"Session cookie header (e.g. `sessionid=abc123` or `osessionid=<session_id>`)","schema":{"type":"string"}},"VerificationTokenHeader":{"name":"X-Verification-Token","in":"header","required":false,"description":"Single-use token from `POST /users/verification/verify/`, proving a guest\nowns the submitted `phone_number`. Required only when the `checkout-phone`\npurpose is enabled and a guest submits a phone number that is not already\nverified in this session. Must be sent as a header — this view does not\nread a `verification_token` body field.","schema":{"type":"string"}}},"schemas":{"IndexPageInput":{"type":"object","required":["user_email"],"properties":{"user_email":{"type":"string","format":"email","description":"User email address. Required for guest checkout."},"phone_number":{"type":"string","description":"Optional phone number. Must match phone regex pattern if provided.\nWhen the `checkout-phone` purpose is enabled, a guest must prove\nownership of this number with an SMS code first and pass the resulting\ntoken in `X-Verification-Token`; the same value must be used as the\n`target` throughout that flow."}}},"CheckoutResponse":{"type":"object","properties":{"context_list":{"type":"array","items":{"$ref":"#/components/schemas/PageContext"}},"pre_order":{"$ref":"#/components/schemas/PreOrder"},"errors":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},{"type":"null"},{"type":"array","items":{"type":"string"}}]},"template_name":{"type":"string"}}},"PageContext":{"type":"object","properties":{"page_name":{"type":"string","description":"Class name of the page (e.g., \"IndexPage\", \"AddressSelectionPage\")"},"page_slug":{"type":"string","description":"URL-friendly slug for the page"},"page_context":{"type":"object","description":"Page-specific context data","additionalProperties":true}}},"PreOrder":{"type":"object","description":"Pre-order state containing basket, addresses, shipping, payment information","properties":{"basket":{"$ref":"#/components/schemas/Basket"},"shipping_address":{"oneOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"billing_address":{"oneOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"shipping_option":{"oneOf":[{"$ref":"#/components/schemas/ShippingOptionDetail"},{"type":"null"}]},"billing_and_shipping_same":{"oneOf":[{"type":"boolean"},{"type":"null"}]},"payment_option":{"oneOf":[{"$ref":"#/components/schemas/PaymentOptionDetail"},{"type":"null"}]},"notifications":{"type":"array","items":{"type":"object"}},"shipping_amount":{"oneOf":[{"type":"string","pattern":"^\\d+\\.\\d{2}$"},{"type":"null"}]},"total_amount":{"oneOf":[{"type":"string","pattern":"^\\d+\\.\\d{2}$"},{"type":"null"}]},"unpaid_amount":{"oneOf":[{"type":"string","pattern":"^\\d+\\.\\d{2}$"},{"type":"null"}]},"loyalty_money":{"oneOf":[{"type":"string","pattern":"^\\d+\\.\\d{2}$"},{"type":"null"}]},"currency_type_label":{"type":"string"},"installment":{"oneOf":[{"$ref":"#/components/schemas/Installment"},{"type":"null"}]},"card_info":{"oneOf":[{"type":"object","description":"Card information from BIN lookup","properties":{"bin_number":{"type":"string","description":"Card BIN (first 6-8 digits)"},"card":{"type":"object","description":"Card details from BIN database","properties":{"pk":{"type":"integer"},"name":{"type":"string","description":"Card type name (e.g., \"Visa\", \"Mastercard\")"}}}}},{"type":"null"}]},"redirect_to_three_d":{"oneOf":[{"type":"boolean"},{"type":"null"}]},"delivery_option":{"oneOf":[{"$ref":"#/components/schemas/DeliveryOption"},{"type":"null"}]},"retail_store":{"oneOf":[{"$ref":"#/components/schemas/RetailStore"},{"type":"null"}]},"funds_transfer_bank":{"oneOf":[{"$ref":"#/components/schemas/BankAccount"},{"type":"null"}]},"number":{"oneOf":[{"type":"string","description":"Pre-order/order number"},{"type":"null"}]},"order":{"oneOf":[{"type":"object","description":"Created order (after checkout completion)","properties":{"pk":{"type":"integer"},"number":{"type":"string"},"status":{"type":"string"}}},{"type":"null"}]},"payment_choice":{"oneOf":[{"$ref":"#/components/schemas/PaymentChoice"},{"type":"null"}]},"user_email":{"oneOf":[{"type":"string"},{"type":"null"}]},"phone_number":{"oneOf":[{"type":"string"},{"type":"null"}]},"user_phone_number":{"oneOf":[{"type":"string"},{"type":"null"}]},"gift_box":{"oneOf":[{"type":"object","properties":{"note":{"type":"string"},"gift_video":{"type":"boolean"},"gift_video_notification_sent":{"type":"boolean"},"price":{"type":"string"}}},{"type":"null"}]},"delivery_range":{"oneOf":[{"type":"object","properties":{"lower":{"type":"string","format":"date-time"},"upper":{"type":"string","format":"date-time"}}},{"type":"null"}]},"total_amount_with_interest":{"oneOf":[{"type":"string","pattern":"^\\d+\\.\\d{2}$"},{"type":"null"}]},"is_guest":{"type":"boolean"},"is_post_order":{"type":"boolean"},"data_source_shipping_options":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/DataSourceShippingOptionDetail"}},{"type":"null"}]},"attribute_based_shipping_options":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/PreOrderAttributeBasedShippingOption"}},{"type":"null"}]}}},"Basket":{"type":"object","properties":{"pk":{"type":"integer"},"total_amount":{"type":"string","pattern":"^\\d+\\.\\d{2}$"}}},"Address":{"type":"object","properties":{"pk":{"type":"integer"},"email":{"type":"string"},"phone_number":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"country":{"$ref":"#/components/schemas/Country"},"city":{"$ref":"#/components/schemas/City"},"line":{"type":"string"},"title":{"type":"string"},"township":{"$ref":"#/components/schemas/Township"},"district":{"oneOf":[{"$ref":"#/components/schemas/District"},{"type":"null"}]},"postcode":{"type":"string"},"notes":{"type":"string"},"company_name":{"type":"string"},"tax_office":{"type":"string"},"tax_no":{"type":"string"},"e_bill_taxpayer":{"type":"boolean"},"is_corporate":{"type":"boolean"},"primary":{"type":"boolean"},"identity_number":{"type":"string"}}},"Country":{"type":"object","properties":{"pk":{"type":"integer"},"code":{"type":"string"},"name":{"type":"string"}}},"City":{"type":"object","properties":{"pk":{"type":"integer"},"name":{"type":"string"}}},"Township":{"type":"object","properties":{"pk":{"type":"integer"},"name":{"type":"string"}}},"District":{"type":"object","properties":{"pk":{"type":"integer"},"name":{"type":"string"}}},"ShippingOptionDetail":{"type":"object","description":"Detailed shipping option with calculated amount","properties":{"pk":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"logo":{"oneOf":[{"type":"string","format":"uri"},{"type":"null"}]},"shipping_amount":{"type":"string","pattern":"^\\d+\\.\\d{2}$"},"description":{"oneOf":[{"type":"string"},{"type":"null"}]},"kwargs":{"type":"object","additionalProperties":true}}},"PaymentOptionDetail":{"type":"object","description":"Detailed payment option with type information","properties":{"pk":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"payment_type":{"type":"string","enum":["credit_card","funds_transfer","bkm_express","loyalty_money","cash_register","gpay","redirection","stored_card","masterpass","masterpass_rest","credit_payment","pay_later","saved_card","confirmation","b2b","wallet","pay_on_delivery"]},"payment_type_label":{"type":"string"}}},"Installment":{"type":"object","properties":{"pk":{"type":"integer"},"installment_count":{"type":"integer"},"label":{"type":"string"},"price_with_accrued_interest":{"type":"string","pattern":"^\\d+\\.\\d{2}$"},"monthly_price_with_accrued_interest":{"type":"string","pattern":"^\\d+\\.\\d{2}$"}}},"DeliveryOption":{"type":"object","properties":{"pk":{"type":"integer"},"name":{"type":"string"},"delivery_option_type":{"type":"string","enum":["customer","retail_store","pickup_location"]},"is_active":{"type":"boolean"}}},"RetailStore":{"type":"object","properties":{"pk":{"type":"integer"},"name":{"type":"string"},"erp_code":{"type":"string"},"township":{"$ref":"#/components/schemas/Township"},"click_and_collect":{"type":"boolean"},"is_active":{"type":"boolean"}}},"BankAccount":{"type":"object","description":"Bank account for funds transfer payments","properties":{"pk":{"type":"integer"},"bank_name":{"type":"string","description":"Name of the bank"},"account_holder":{"type":"string","description":"Account holder name"},"iban":{"type":"string","description":"International Bank Account Number"},"currency":{"type":"string","description":"Currency code (e.g., \"USD\", \"EUR\", \"TRY\")"},"is_active":{"type":"boolean"}}},"PaymentChoice":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"price":{"type":"string","pattern":"^\\d+\\.\\d{2}$"}}},"DataSourceShippingOptionDetail":{"type":"object","description":"Data source shipping option for multi-vendor shipping","properties":{"pk":{"type":"integer"},"shipping_amount":{"type":"string","pattern":"^\\d+\\.\\d{2}$"},"shipping_option_name":{"type":"string"},"shipping_option_logo":{"oneOf":[{"type":"string","format":"uri"},{"type":"null"}]},"data_source":{"type":"object","properties":{"pk":{"type":"integer"},"title":{"type":"string"}}},"description":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"PreOrderAttributeBasedShippingOption":{"type":"object","description":"Attribute-based shipping option selected for a product group","properties":{"pk":{"type":"integer"},"shipping_option_name":{"type":"string"},"shipping_option_logo":{"oneOf":[{"type":"string","format":"uri"},{"type":"null"}]},"shipping_amount":{"type":"string","pattern":"^\\d+\\.\\d{2}$"},"product_ids":{"type":"array","items":{"type":"integer"}},"attribute_value":{"type":"string"},"attribute_key":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://apidocs.akinon.com/commerce-openapis/checkout/entry-and-address/submit-index-page-email-and-phone.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
