> ## Documentation Index
> Fetch the complete documentation index at: https://nayax-44d6e37b-docs-marshall-faq-redistribution.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Single Session with Pre-Selection

This guide walks through the **Pre-Selection** vending flow. You'll understand the sequence of events that separate product selection from payment authorization within a single transaction, ensuring a smooth and secure vending session.

## Payment Flow

Visualize the Pre-Selection process with the diagram below, which illustrates each step of the single vending session flow, from product selection to payment authorization and dispensing.

<Frame>
  <img src="https://mintcdn.com/nayax-44d6e37b-docs-marshall-faq-redistribution/sBwRUCoASdSz1DKZ/images/docs/marshall-single-session-with-pre-sel/image1.png?fit=max&auto=format&n=sBwRUCoASdSz1DKZ&q=85&s=e1426ef3ad1f9d62a937e913433012a5" width="1706" height="1786" data-path="images/docs/marshall-single-session-with-pre-sel/image1.png" />
</Frame>

Below is a breakdown of the diagram:

1. The Nayax Device sends a message to the consumer: "Please Select a Product."
2. The consumer selects a product from the vending machine.
3. The peripheral's SDK sends a vending request to the Nayax Device.

   <CodeGroup>
     ```c C theme={null}
     vmc_vend_vend_request(vend_session_t *session)
     ```

     ```csharp C# theme={null}
     vmc_instance.vend.vend_request(session);
     ```

     ```java Java theme={null}
     m_vmc.vend.vend_request(m_sessions[m_active_session]);
     ```
   </CodeGroup>
4. The Nayax Device sends a message to the consumer: "Please Present Card."
5. The consumer presents their payment card.
6. The Nayax Device sends an authorization request to the Nayax Server.
7. The Nayax Server forwards the authorization request to the Billing Provider.
8. The Billing Provider sends an authorization response (approved) to the Nayax Server.
9. The Nayax Server sends the authorization response (approved) back to the Nayax Device.
10. The peripheral's SDK handles transaction data received from the Nayax Device via the Transfer Data command (said data includes information about the Nayax transaction ID and the consumer's card details):

    <CodeGroup>
      ```c C theme={null}
      vmc_vend_event_handler_cb(vm_vend_event_on_transaction_info)
      ```

      ```csharp C# theme={null}
      vend_callbacks(onTransactionInfo(data))
      ```

      ```java Java theme={null}
      vmc_vend_events()
      (via onTransactionInfo(data))
      ```
    </CodeGroup>
11. The SDK triggers "Vend Approved" events:

    <CodeGroup>
      ```c C theme={null}
      vmc_vend_event_handler_cb(vm_vend_event_on_vend_approved)
      ```

      ```csharp C# theme={null}
      vend_callbacks()
      (via onVendApproved(session))
      ```

      ```java Java theme={null}
      vmc_vend_events()
      (via onVendApproved(session))
      ```
    </CodeGroup>
12. The peripheral dispenses the product/ provides the service to the consumer.
13. The SDK reports "vend success":

    <CodeGroup>
      ```c C theme={null}
      vmc_vend_vend_status(&session, __true)
      ```

      ```csharp C# theme={null}
      vmc_vend_events()
      (via onVendApproved(session) -which would return "true")
      ```

      ```java Java theme={null}
      vmc_vend_events()
      (via onVendApproved(session) -which would return "true")
      ```
    </CodeGroup>

    And completes the vend session:

    <CodeGroup>
      ```c C theme={null}
      vmc_vend_vend_session_complete_lowlevel()
      ```

      ```csharp C# theme={null}
      no such function in C# or Java due to the nature of the languages
      ```

      ```java Java theme={null}
      no such function in C# or Java due to the nature of the languages
      ```
    </CodeGroup>
14. Message to the consumer: "Please Take Product."
15. The Nayax Device sends a settlement request to the Nayax Server.
16. The Nayax Server forwards the settlement request to the Billing Provider.
17. The Billing Provider sends a settlement response (OK) to the Nayax Server.
18. The Nayax Server returns the settlement response (OK) to the Nayax Device.

## See Also

<CardGroup cols={3}>
  <Card icon="diagram-project" title="Payment Flows" href="/docs/integrate-pos-device/marshall/payment-flows/marshall-payment-flows">
    Explore the full range of payment flows available in the Marshall SDK.
  </Card>

  <Card icon="rocket" title="Get Started" href="/docs/integrate-pos-device/marshall/get-started/marshall-get-started">
    Get up and running with the Marshall SDK integration.
  </Card>

  <Card icon="code" title="Methods & Functions" href="/docs/integrate-pos-device/marshall/methods-functions/marshall-methods-and-functions">
    Find reference documentation for all methods and functions in the Marshall SDK.
  </Card>
</CardGroup>
