## Purchase Flow ```plantuml actor User participant VTEX collections "Checkout Page" as CheckoutPage participant "Adapter VTEX" as Adapter participant "Checkout API" as CheckoutAPI database CheckoutDB participant "Payments API" as Transfero autonumber User -> VTEX: Init checkout VTEX -> Adapter: POST /api/payments Adapter -> CheckoutAPI: POST /api/v1/order CheckoutAPI -> CheckoutAPI: Validate if partner has enough limit CheckoutAPI -> CheckoutDB: Persist into database CheckoutAPI -> Adapter: Return redirectUrl (with token) Adapter -> VTEX: Normalized response with paymentUrl VTEX -> User: Redirect command User -> CheckoutPage: https://checkout.transfero.com/purchase?token=123456789 CheckoutPage -> CheckoutAPI: GET /api/v1/order-by- CheckoutAPI -> CheckoutDB: Get Order data CheckoutDB -> CheckoutAPI: Retrieve Order data CheckoutAPI -> CheckoutPage: Retrieve purchase data CheckoutPage -> User: Show checkout information for the user User -> User: Validate checkout information CheckoutPage-> CheckoutAPI: GET /api/v1/order-by-token/methods CheckoutAPI -> CheckoutDB: Get methods configured for the Partner CheckoutDB -> CheckoutAPI: Retrieve configured methods CheckoutAPI -> CheckoutPage: Retrieve allowed payment methods CheckoutPage -> User: Ask for select the payment method User -> User: Select the desirable token and blockchain User -> CheckoutPage: Submit choice for payment preview CheckoutPage -> CheckoutAPI: POST /api/v1/order-by-token/preview CheckoutAPI -> CheckoutDB: Get partner information CheckoutDB -> CheckoutAPI: Retrieve partner information CheckoutAPI -> Transfero: POST /api/v2/requestQuote Transfero -> CheckoutAPI: Retrieve how much the user should deposit CheckoutAPI -> CheckoutPage: Retrieve payment preview CheckoutPage -> User: Show price preview for the user User -> CheckoutPage: Confirm price and ask for deposit information CheckoutPage -> CheckoutAPI: POST /api/v1/order-by-token/payment CheckoutAPI -> CheckoutDB: Get partner information CheckoutDB -> CheckoutAPI: Retrieve partner information CheckoutAPI -> Transfero: POST /api/ramp/v1/swaporder Transfero -> CheckoutAPI: Retrieve deposit information CheckoutAPI -> CheckoutDB: Persist deposit information CheckoutAPI -> CheckoutPage: Retrieve deposit information CheckoutPage -> User: Show deposit information for User User -> User: Makes the deposit CheckoutPage -> CheckoutAPI: Polling in GET /api/v1/order-by-token/status Transfero -> Transfero: Receive the deposit Transfero -> CheckoutAPI: Notify via webhook the depositReceived CheckoutAPI -> CheckoutDB: Update order status CheckoutAPI -> CheckoutDB: Insert Transaction CheckoutAPI -> Adapter: Notify payment completed Adapter -> VTEX: Notify payment completed CheckoutAPI -> CheckoutPage: Retrieve payment confirmation and redirectUrl CheckoutPage -> User: Confirmation Page CheckoutPage -> User: Redirect back to VTEX User -> VTEX: Back at VTEX Checkout page ```